diff --git a/src/platforms/h5/service/api/network/upload-file.js b/src/platforms/h5/service/api/network/upload-file.js index 1e9db34e52ccc5a5b91b1ed99798ca103aaad6ba..9e3b29e264f4d29c54e82908dfbfc2c56838dd93 100644 --- a/src/platforms/h5/service/api/network/upload-file.js +++ b/src/platforms/h5/service/api/network/upload-file.js @@ -47,6 +47,7 @@ export function uploadFile ({ url, filePath, name, + files, header, formData }, callbackId) { @@ -55,15 +56,23 @@ export function uploadFile ({ invokeCallbackHandler: invoke } = UniServiceJSBridge var uploadTask = new UploadTask(null, callbackId) - - function upload (file) { + if (!Array.isArray(files) || !files.length) { + files = [{ + name, + uri: filePath + }] + } + function upload (realFiles) { var xhr = new XMLHttpRequest() var form = new FormData() var timer Object.keys(formData).forEach(key => { form.append(key, formData[key]) }) - form.append(name, file, file.name || `file-${Date.now()}`) + Object.values(files).forEach(({ name }, index) => { + const file = realFiles[index] + form.append(name || 'file', file, file.name || `file-${Date.now()}`) + }) xhr.open('POST', url) Object.keys(header).forEach(key => { xhr.setRequestHeader(key, header[key]) @@ -118,13 +127,16 @@ export function uploadFile ({ } } - urlToFile(filePath).then(upload).catch(() => { - setTimeout(() => { - invoke(callbackId, { - errMsg: 'uploadFile:fail file error' - }) - }, 0) - }) + Promise + .all(files.map(({ name, uri }) => urlToFile(uri))) + .then(upload) + .catch(() => { + setTimeout(() => { + invoke(callbackId, { + errMsg: 'uploadFile:fail file error' + }) + }, 0) + }) return uploadTask }