Skip to content

Commit 07367de

Browse files
feat(uploader): support beforeUpload in taro (#3188)
* feat: upload * fix: prettier
1 parent 10e6053 commit 07367de

File tree

4 files changed

+47
-5
lines changed

4 files changed

+47
-5
lines changed

packages/nutui-prettier-plugin/index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,15 @@ function printTable(path, options, print) {
3434
const contents = path.map(
3535
() =>
3636
path.map(() => {
37-
const text = print().flat(Infinity).join('')
37+
const text = print()
38+
.flat(Infinity)
39+
.map((item) => {
40+
if (typeof item === 'string') {
41+
return item
42+
}
43+
return item.parts.flat(Infinity).join('')
44+
})
45+
.join('')
3846
return { text }
3947
}, 'children'),
4048
'children'

packages/nutui-taro-demo/src/dentry/pages/uploader/index.vue

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template>
22
<Demo class="bg-w">
33
<h2>基础用法</h2>
4-
<nut-uploader :url="uploadUrl"></nut-uploader>
4+
<nut-uploader :url="uploadUrl" :before-upload="beforeUpload"></nut-uploader>
55
<h2>上传状态</h2>
66
<nut-uploader v-model:file-list="defaultFileList" :url="uploadUrl" maximum="3" multiple @delete="onDelete">
77
</nut-uploader>
@@ -20,7 +20,7 @@
2020
<nut-progress
2121
:percentage="progressPercentage"
2222
stroke-color="linear-gradient(270deg, rgba(18,126,255,1) 0%,rgba(32,147,255,1) 32.815625%,rgba(13,242,204,1) 100%)"
23-
:status="progressPercentage == 100 ? '' : 'active'"
23+
:status="progressPercentage == 100 ? undefined : 'active'"
2424
>
2525
</nut-progress>
2626
<!--
@@ -104,6 +104,14 @@ const defaultFileList1 = reactive([
104104
type: 'image'
105105
}
106106
])
107+
const beforeUpload = async (files: FileList) => {
108+
console.log('beforeUpload 触发')
109+
const allowedTypes = ['image/png']
110+
const filteredFiles = Array.from(files).filter(file =>
111+
allowedTypes.includes(file.type)
112+
)
113+
return filteredFiles
114+
}
107115
const onOversize = (files: File[]) => {
108116
console.log('oversize 触发 文件大小不能超过 50kb', files)
109117
}

src/packages/__VUE/uploader/doc.taro.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ const clearUpload = () => {
270270
| disabled | 是否禁用文件上传 | Boolean | `false` |
271271
| multiple | 是否支持文件多选 | Boolean | `true` |
272272
| timeout | 超时时间,单位为毫秒 | Number \| String | `1000 * 30` |
273+
| before-upload | 上传前的函数需要返回一个`Promise`对象 | Function | `null` |
273274
| before-xhr-upload | 执行 `Taro.uploadFile` 上传时,自定义方式 | Function(Taro.uploadFile,option) | `null` |
274275
| mode`v4.1.1 仅支持小程序` | 预览图片的 mode 属性 | string | `aspectFit` |
275276

src/packages/__VUE/uploader/index.taro.vue

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ export default create({
136136
disabled: { type: Boolean, default: false },
137137
autoUpload: { type: Boolean, default: true },
138138
maxDuration: { type: Number, default: 10 },
139+
beforeUpload: {
140+
type: Function,
141+
default: null
142+
},
139143
beforeXhrUpload: {
140144
type: Function,
141145
default: null
@@ -235,7 +239,18 @@ export default create({
235239
// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
236240
const { tempFiles } = res
237241
const _files: Taro.chooseMedia.ChooseMedia[] = filterFiles<Taro.chooseMedia.ChooseMedia>(tempFiles)
238-
readFile<Taro.chooseMedia.ChooseMedia>(_files)
242+
243+
if (props.beforeUpload) {
244+
props.beforeUpload(new Array<File>().slice.call(_files)).then(
245+
(f: Array<File> | boolean) => {
246+
const _files: File[] = filterFiles(new Array<File>().slice.call(f))
247+
if (!_files.length) res.tempFiles = []
248+
readFile(_files)
249+
}
250+
)
251+
} else {
252+
readFile(_files)
253+
}
239254
emit('change', {
240255
fileList: fileList.value
241256
})
@@ -244,7 +259,17 @@ export default create({
244259
// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
245260
const { tempFiles } = res
246261
const _files: Taro.chooseImage.ImageFile[] = filterFiles<Taro.chooseImage.ImageFile>(tempFiles)
247-
readFile<Taro.chooseImage.ImageFile>(_files)
262+
if (props.beforeUpload) {
263+
props.beforeUpload(new Array<File>().slice.call(_files)).then(
264+
(f: Array<File> | boolean) => {
265+
const _files: File[] = filterFiles(new Array<File>().slice.call(f))
266+
if (!_files.length) res.tempFiles = []
267+
readFile(_files)
268+
}
269+
)
270+
} else {
271+
readFile(_files)
272+
}
248273
emit('change', {
249274
fileList: fileList.value
250275
})

0 commit comments

Comments
 (0)