Commit 3ede818e authored by 杨奕's avatar 杨奕 Committed by GitHub

Upload: filter accepted file types in dragger (#10278)

parent 3934e8f3
...@@ -19,8 +19,10 @@ export default { ...@@ -19,8 +19,10 @@ export default {
IframeUpload IframeUpload
}, },
provide: { provide() {
uploader: this return {
uploader: this
};
}, },
inject: { inject: {
......
...@@ -17,6 +17,11 @@ ...@@ -17,6 +17,11 @@
props: { props: {
disabled: Boolean disabled: Boolean
}, },
inject: {
uploader: {
default: ''
}
},
data() { data() {
return { return {
dragover: false dragover: false
...@@ -29,10 +34,35 @@ ...@@ -29,10 +34,35 @@
} }
}, },
onDrop(e) { onDrop(e) {
if (!this.disabled) { if (this.disabled || !this.uploader) return;
this.dragover = false; const accept = this.uploader.accept;
this.dragover = false;
if (!accept) {
this.$emit('file', e.dataTransfer.files); this.$emit('file', e.dataTransfer.files);
return;
} }
this.$emit('file', [].slice.call(e.dataTransfer.files).filter(file => {
const { type, name } = file;
const extension = name.indexOf('.') > -1
? `.${ name.split('.').pop() }`
: '';
const baseType = type.replace(/\/.*$/, '');
return accept.split(',')
.map(type => type.trim())
.filter(type => type)
.some(acceptedType => {
if (/\..+$/.test(acceptedType)) {
return extension === acceptedType;
}
if (/\/\*$/.test(acceptedType)) {
return baseType === acceptedType.replace(/\/\*$/, '');
}
if (/^[^\/]+\/[^\/]+$/.test(acceptedType)) {
return type === acceptedType;
}
return false;
});
}));
} }
} }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment