parent
8d87d78db2
commit
3e746e1ca3
|
@ -9,6 +9,7 @@ interface FileUploadProps {
|
||||||
maxFileSize?: number;
|
maxFileSize?: number;
|
||||||
invalidFileSizeMessage?: string;
|
invalidFileSizeMessage?: string;
|
||||||
invalidFileLimitMessage?: string;
|
invalidFileLimitMessage?: string;
|
||||||
|
invalidFileTypeMessage?: string;
|
||||||
fileLimit?: number;
|
fileLimit?: number;
|
||||||
withCredentials?: boolean;
|
withCredentials?: boolean;
|
||||||
previewWidth?: number;
|
previewWidth?: number;
|
||||||
|
|
|
@ -86,6 +86,10 @@ export default {
|
||||||
type: String,
|
type: String,
|
||||||
default: '{0}: Invalid file size, file size should be smaller than {1}.'
|
default: '{0}: Invalid file size, file size should be smaller than {1}.'
|
||||||
},
|
},
|
||||||
|
invalidFileTypeMessage: {
|
||||||
|
type: String,
|
||||||
|
default: '{0}: Invalid file type, allowed file types: {1}.'
|
||||||
|
},
|
||||||
fileLimit: {
|
fileLimit: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: null
|
default: null
|
||||||
|
@ -276,6 +280,11 @@ export default {
|
||||||
return !!window['MSInputMethodContext'] && !!document['documentMode'];
|
return !!window['MSInputMethodContext'] && !!document['documentMode'];
|
||||||
},
|
},
|
||||||
validate(file) {
|
validate(file) {
|
||||||
|
if (this.accept && !this.isFileTypeValid(file)) {
|
||||||
|
this.messages.push(this.invalidFileTypeMessage.replace('{0}', file.name).replace('{1}', this.accept))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.maxFileSize && file.size > this.maxFileSize) {
|
if (this.maxFileSize && file.size > this.maxFileSize) {
|
||||||
this.messages.push(this.invalidFileSizeMessage.replace('{0}', file.name).replace('{1}', this.formatSize(this.maxFileSize)));
|
this.messages.push(this.invalidFileSizeMessage.replace('{0}', file.name).replace('{1}', this.formatSize(this.maxFileSize)));
|
||||||
return false;
|
return false;
|
||||||
|
@ -283,13 +292,38 @@ export default {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
isFileTypeValid(file) {
|
||||||
|
let acceptableTypes = this.accept.split(',').map(type => type.trim());
|
||||||
|
for(let type of acceptableTypes) {
|
||||||
|
let acceptable = this.isWildcard(type) ? this.getTypeClass(file.type) === this.getTypeClass(type)
|
||||||
|
: file.type == type || this.getFileExtension(file).toLowerCase() === type.toLowerCase();
|
||||||
|
|
||||||
|
if (acceptable) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
getTypeClass(fileType) {
|
||||||
|
return fileType.substring(0, fileType.indexOf('/'));
|
||||||
|
},
|
||||||
|
isWildcard(fileType){
|
||||||
|
return fileType.indexOf('*') !== -1;
|
||||||
|
},
|
||||||
|
getFileExtension(file) {
|
||||||
|
return '.' + file.name.split('.').pop();
|
||||||
|
},
|
||||||
|
isImage(file) {
|
||||||
|
return /^image\//.test(file.type);
|
||||||
|
},
|
||||||
onDragEnter(event) {
|
onDragEnter(event) {
|
||||||
if (!this.disabled) {
|
if (!this.disabled) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onDragOver() {
|
onDragOver(event) {
|
||||||
if (!this.disabled) {
|
if (!this.disabled) {
|
||||||
DomHandler.addClass(this.$refs.content, 'p-fileupload-highlight');
|
DomHandler.addClass(this.$refs.content, 'p-fileupload-highlight');
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
@ -301,7 +335,7 @@ export default {
|
||||||
DomHandler.removeClass(this.$refs.content, 'p-fileupload-highlight');
|
DomHandler.removeClass(this.$refs.content, 'p-fileupload-highlight');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onDrop() {
|
onDrop(event) {
|
||||||
if (!this.disabled) {
|
if (!this.disabled) {
|
||||||
DomHandler.removeClass(this.$refs.content, 'p-fileupload-highlight');
|
DomHandler.removeClass(this.$refs.content, 'p-fileupload-highlight');
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
@ -326,9 +360,6 @@ export default {
|
||||||
this.files.splice(index, 1);
|
this.files.splice(index, 1);
|
||||||
this.files = [...this.files];
|
this.files = [...this.files];
|
||||||
},
|
},
|
||||||
isImage(file) {
|
|
||||||
return /^image\//.test(file.type);
|
|
||||||
},
|
|
||||||
clearInputElement() {
|
clearInputElement() {
|
||||||
this.$refs.fileInput.value = '';
|
this.$refs.fileInput.value = '';
|
||||||
},
|
},
|
||||||
|
@ -399,7 +430,7 @@ export default {
|
||||||
return this.disabled || (this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount);
|
return this.disabled || (this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount);
|
||||||
},
|
},
|
||||||
uploadDisabled() {
|
uploadDisabled() {
|
||||||
return this.disabled || !this.hasFiles;
|
return this.disabled || !this.hasFiles || (this.fileLimit < this.files.length);
|
||||||
},
|
},
|
||||||
cancelDisabled() {
|
cancelDisabled() {
|
||||||
return this.disabled || !this.hasFiles;
|
return this.disabled || !this.hasFiles;
|
||||||
|
|
Loading…
Reference in New Issue