|
11 | 11 | :accept="accept" |
12 | 12 | :capture="capture" |
13 | 13 | :disabled="disabled" |
14 | | - :webkitdirectory="directory && features.directory" |
15 | | - :allowdirs="directory && features.directory" |
16 | | - :directory="directory && features.directory" |
| 14 | + :webkitdirectory="iDirectory" |
| 15 | + :allowdirs="iDirectory" |
| 16 | + :directory="iDirectory" |
17 | 17 | :multiple="multiple && features.html5" |
18 | 18 | @change="inputOnChange" |
19 | 19 | /> |
@@ -406,6 +406,12 @@ export default defineComponent({ |
406 | 406 | exts = exts.map(function(value) { return value.trim() }).filter(function(value) { return value }) |
407 | 407 | return new RegExp('\\.(' + exts.join('|').replace(/\./g, '\\.') + ')$', 'i') |
408 | 408 | }, |
| 409 | + iDirectory() :any { |
| 410 | + if (this.directory && this.features.directory) { |
| 411 | + return true |
| 412 | + } |
| 413 | + return undefined |
| 414 | + } |
409 | 415 | }, |
410 | 416 | watch: { |
411 | 417 | active(active: boolean) { |
@@ -625,13 +631,16 @@ export default defineComponent({ |
625 | 631 | const maximumValue = this.iMaximum |
626 | 632 |
|
627 | 633 | |
| 634 | +
|
| 635 | + |
628 | 636 | // @ts-ignore |
629 | 637 | const entrys: any = el.webkitEntries || el.entries || undefined |
630 | 638 | if (entrys?.length) { |
631 | 639 | return this.getFileSystemEntry(entrys).then((files) => { |
632 | 640 | return this.add(files) as VueUploadItem[] |
633 | 641 | }) |
634 | 642 | } |
| 643 | +
|
635 | 644 | |
636 | 645 | if (el.files) { |
637 | 646 | for (let i = 0; i < el.files.length; i++) { |
@@ -956,14 +965,14 @@ export default defineComponent({ |
956 | 965 | return Promise.resolve(file) |
957 | 966 | } |
958 | 967 | // 后缀 |
959 | | - if (file.name && this.iExtensions) { |
| 968 | + if (file.name && this.iExtensions && file.type !== "text/directory") { |
960 | 969 | if (file.name.search(this.iExtensions) === -1) { |
961 | 970 | return Promise.reject(new Error('extension')) |
962 | 971 | } |
963 | 972 | } |
964 | 973 |
|
965 | 974 | // 大小 |
966 | | - if (this.size > 0 && file.size !== undefined && file.size >= 0 && file.size > this.size) { |
| 975 | + if (this.size > 0 && file.size !== undefined && file.size >= 0 && file.size > this.size && file.type !== "text/directory") { |
967 | 976 | return Promise.reject(new Error('size')) |
968 | 977 | } |
969 | 978 |
|
@@ -1036,7 +1045,7 @@ export default defineComponent({ |
1036 | 1045 | form.append(key, value) |
1037 | 1046 | } |
1038 | 1047 | } |
1039 | | - // @ts-ignore |
| 1048 | +
|
1040 | 1049 | // Moved file.name as the first option to set the filename of the uploaded file, since file.name |
1041 | 1050 | // contains the full (relative) path of the file not just the filename as in file.file.filename |
1042 | 1051 | // @ts-ignore |
|
0 commit comments