Skip to content

Commit

Permalink
[Upload] 自定义上传方法,支持一个请求上传返回多个文件的数据回显 (#1165)
Browse files Browse the repository at this point in the history
* feat(image): support .avif

* feat(web): upload support multiple files in one request

---------

Co-authored-by: sheepluo <sheepluo@tencent.com>
  • Loading branch information
chaishi and sheepluo committed Mar 1, 2023
1 parent 4977c4c commit 52d814f
Showing 1 changed file with 28 additions and 11 deletions.
39 changes: 28 additions & 11 deletions js/upload/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ export function handleRequestMethodResponse(res: RequestMethodResponse) {
log.error('Upload', '`requestMethodResponse.status` must be `success` or `fail`, examples `{ status: \'success\', response: { url: \'\' } }`');
return false;
}
if (res.status === 'success' && (!res.response || !res.response.url)) {
log.warn('Upload', '`requestMethodResponse.response.url` is required as `status` is `success`');
if (res.status === 'success' && (!res.response || (!res.response.url && !res.response.files))) {
log.warn('Upload', '`requestMethodResponse.response.url` or `requestMethodResponse.response.files` is required if `status` is `success`');
}
return true;
}
Expand Down Expand Up @@ -147,16 +147,33 @@ export function uploadOneRequest(params: HandleUploadParams): Promise<UploadRequ
return;
}
let { response } = res;
if (res.status === 'fail') {
response = response || {};
response.error = res.error || response.error;
let resultFiles: UploadFile[] = [];
// 一个请求上传并返回一个文件
if (response.url && !response.files) {
if (res.status === 'fail') {
response = response || {};
response.error = res.error || response.error;
}
toUploadFiles.forEach((file) => {
file.status = res.status;
file.response = response;
file.url = response.url;
});
resultFiles = toUploadFiles;
} else if (response.files) {
// 一个请求上传并返回多个文件
resultFiles = response.files.map((file) => {
const fileInfo = toUploadFiles.find((toFile) => (
(file.name && toFile.name === file.name) || (file.raw && toFile.raw === file.raw)
));
return { ...fileInfo, ...file };
});
}
toUploadFiles.forEach((file) => {
file.status = res.status;
file.response = response;
file.url = response.url;
});
const result = { response, file: toUploadFiles[0], files: toUploadFiles };
const result = {
response,
file: resultFiles[0],
files: resultFiles
};
if (res.status === 'success') {
params.onResponseSuccess?.(result);
} else if (res.status === 'fail') {
Expand Down

0 comments on commit 52d814f

Please sign in to comment.