const AliOss = (function (){ const downloadFile = function (url, filename) { axios.get(url, {responseType: 'blob' }).then(res => { saveAs(res.data, filename); }); }; const downloadFileSync = function(url) { return new Promise((resolve, reject) => { axios.get(url, {responseType: 'blob'}).then(res => { resolve(res.data); }).catch(err => { reject(err); }); }) }; const zipFiles = function (files, filename = '打包.zip', successCallback, errorCallback) { const zip = new JSZip(); const download = [], fails = []; files.forEach(f => { download.push(downloadFileSync(f.filepath).then(data => { zip.file(f.filename + f.fileext, data, {binary: true}); }).catch(err => { fails.push(f); })); }); Promise.all(download).then(() => { if (fails.length < files.length) { zip.generateAsync({ type: "blob" }).then(content => { saveAs(content, filename); successCallback && successCallback(fails); }); } else { errorCallback && errorCallback(fails); } }) }; return { downloadFile, downloadFileSync, zipFiles} })();