Skip to content

Commit 1044179

Browse files
authored
feat(Uploader): add file result-type (youzan#4680)
1 parent 1d9b3e2 commit 1044179

File tree

5 files changed

+60
-9
lines changed

5 files changed

+60
-9
lines changed

src/uploader/README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ export default {
124124
| before-delete | Hook before delete the file, return false to stop reading the file, can return Promise | *Function* | - | - |
125125
| max-size | Max size of file | *number* | - | - |
126126
| max-count | Max count of image | *number* | - | - |
127-
| result-type | Type of file read result, can be set to `dataUrl` `text` | *string* | `dataUrl` | - |
127+
| result-type | Type of file read result, can be set to `file` `text` | *string* | `dataUrl` | 2.2.7 |
128128
| upload-text | Upload text | *string* | - | - |
129129
| image-fit | Preview image fit mode | *string* | `cover` | 2.1.5 |
130130

@@ -149,3 +149,11 @@ export default {
149149
|------|------|------|
150150
| file | File object | *object* |
151151
| detail | Detail info, contains name and index | *object* |
152+
153+
### ResultType
154+
155+
| Value | Description |
156+
|------|------|
157+
| file | Result contains File object |
158+
| text | Result contains File object and text content |
159+
| dataUrl | Result contains File object and base64 content |

src/uploader/README.zh-CN.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ export default {
140140
| before-delete | 文件删除前的回调函数,返回`false`可终止文件读取,支持返回`Promise` | *Function* | - | - |
141141
| max-size | 文件大小限制,单位为`byte` | *number* | - | - |
142142
| max-count | 文件上传数量限制 | *number* | - | - |
143-
| result-type | 文件读取结果类型,可选值为`text` | *string* | `dataUrl` | - |
143+
| result-type | 文件读取结果类型,可选值为`file` `text` | *string* | `dataUrl` | 2.2.7 |
144144
| upload-text | 上传区域文字提示 | *string* | - | - |
145145
| image-fit | 预览图裁剪模式,可选值见 [Image](#/zh-CN/image) 组件 | *string* | `cover` | 2.1.5 |
146146

@@ -167,3 +167,13 @@ before-read、after-read、before-delete 执行时会传递以下回调参数:
167167
|------|------|------|
168168
| file | 文件解析后的 file 对象 | *object* |
169169
| detail | 额外信息,包含 name 和 index 字段 | *object* |
170+
171+
### ResultType 可选值
172+
173+
`result-type`字段表示文件读取结果的类型,上传大文件时,建议使用 file 类型,避免卡顿。
174+
175+
|| 描述 |
176+
|------|------|
177+
| file | 结果仅包含 File 对象 |
178+
| text | 结果包含 File 对象,以及文件的文本内容 |
179+
| dataUrl | 结果包含 File 对象,以及文件对应的 base64 编码 |

src/uploader/index.js

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,16 +114,27 @@ export default createComponent({
114114
}
115115

116116
Promise.all(files.map(file => readFile(file, this.resultType))).then(contents => {
117-
const fileList = files.map((file, index) => ({
118-
file,
119-
content: contents[index]
120-
}));
117+
const fileList = files.map((file, index) => {
118+
const result = { file };
119+
120+
if (contents[index]) {
121+
result.content = contents[index];
122+
}
123+
124+
return result;
125+
});
121126

122127
this.onAfterRead(fileList, oversize);
123128
});
124129
} else {
125130
readFile(files, this.resultType).then(content => {
126-
this.onAfterRead({ file: files, content }, oversize);
131+
const result = { file: files };
132+
133+
if (content) {
134+
result.content = content;
135+
}
136+
137+
this.onAfterRead(result, oversize);
127138
});
128139
}
129140
},

src/uploader/test/index.spec.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ test('disabled', () => {
3737
expect(afterRead).toHaveBeenCalledTimes(0);
3838
});
3939

40-
it('read text', done => {
40+
it('result-type as text', done => {
4141
const wrapper = mount(Uploader, {
4242
propsData: {
4343
resultType: 'text',
@@ -51,6 +51,21 @@ it('read text', done => {
5151
wrapper.vm.onChange(file);
5252
});
5353

54+
it('result-type as file', done => {
55+
const wrapper = mount(Uploader, {
56+
propsData: {
57+
resultType: 'file',
58+
afterRead: readFile => {
59+
expect(readFile.file).toBeTruthy();
60+
expect(readFile.content).toBeFalsy();
61+
done();
62+
}
63+
}
64+
});
65+
66+
wrapper.vm.onChange(file);
67+
});
68+
5469
it('set input name', done => {
5570
const wrapper = mount(Uploader, {
5671
propsData: {

src/uploader/utils.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
export type ResultType = 'dataUrl' | 'text' | 'file';
2+
13
export function toArray<T>(item: T | T[]): T[] {
24
if (Array.isArray(item)) {
35
return item;
@@ -6,8 +8,13 @@ export function toArray<T>(item: T | T[]): T[] {
68
return [item];
79
}
810

9-
export function readFile(file: File, resultType: string) {
11+
export function readFile(file: File, resultType: ResultType) {
1012
return new Promise(resolve => {
13+
if (resultType === 'file') {
14+
resolve();
15+
return;
16+
}
17+
1118
const reader = new FileReader();
1219

1320
reader.onload = event => {

0 commit comments

Comments
 (0)