import streamSaver from "streamsaver"; import "streamsaver/examples/zip-stream.js"; import store from '@/store' // 下载文件并压缩 function zipFiles(zipName, files) { console.log("同步下载打包开始时间:" + new Date()); store.dispatch('trials/setUnLock', true) // 创建压缩文件输出流 const zipFileOutputStream = streamSaver.createWriteStream(zipName); // 创建下载文件流 const fileIterator = files.values(); const readableZipStream = new ZIP({ async pull(ctrl) { const fileInfo = fileIterator.next(); if (fileInfo.done) {//迭代终止 ctrl.close(); } else { const { name, url } = fileInfo.value; return fetch(url).then(res => { ctrl.enqueue({ name, stream: () => res.body }); }) } } }); if (window.WritableStream && readableZipStream.pipeTo) { // 开始下载 readableZipStream .pipeTo(zipFileOutputStream) .then(() => { console.log("同步下载打包结束时间:" + new Date()); store.dispatch('trials/setUnLock', false) }); } } // 下载文件并修改名称 async function updateFile(file, name) { try { store.dispatch('trials/setUnLock', true) const fileOutputStream = streamSaver.createWriteStream(name); let res = await fetch(file); res.body.pipeTo(fileOutputStream).then(() => { store.dispatch('trials/setUnLock', true) }); } catch (err) { console.log(err) } } export function downLoadFile(file, name, type = 'file') { if (type === 'zip') return zipFiles(name, file); return updateFile(file, name) }