parent
d0567119ab
commit
7b11aa9960
6 changed files with 111 additions and 31 deletions
@ -0,0 +1,56 @@ |
|||||||
|
// 导出压缩包
|
||||||
|
import JSZip from 'jszip' |
||||||
|
import FileSaver from 'file-saver' |
||||||
|
|
||||||
|
//文件以流的形式获取(参数url为文件链接地址)
|
||||||
|
const getImgArrayBuffer = url => { |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
//通过请求获取文件blob格式
|
||||||
|
let xmlhttp = new XMLHttpRequest(); |
||||||
|
xmlhttp.open('GET', url, true); |
||||||
|
xmlhttp.responseType = 'blob' |
||||||
|
xmlhttp.onload = function () { |
||||||
|
if (xmlhttp.status == 200) { |
||||||
|
resolve(xmlhttp.response); |
||||||
|
} else { |
||||||
|
reject(xmlhttp.response); |
||||||
|
} |
||||||
|
}; |
||||||
|
xmlhttp.send(); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param {String} zipName 压缩包名字 |
||||||
|
* @param {Array} files 需要压缩的文件数组 |
||||||
|
* @param {Function | undefined} callback 回调 |
||||||
|
*/ |
||||||
|
export default function (zipName, files, callback) { |
||||||
|
var zip = new JSZip(); |
||||||
|
var promises = []; |
||||||
|
let cache = {}; |
||||||
|
for (let item of files) { |
||||||
|
// item.filePath为文件链接地址
|
||||||
|
// item.fileName为文件名称
|
||||||
|
if(item.filePath) { |
||||||
|
const promise = getImgArrayBuffer(item.filePath).then((data) => { |
||||||
|
// 下载文件, 并存成ArrayBuffer对象(blob)
|
||||||
|
zip.file(item.fileName, data, { binary: true }); // 逐个添加文件
|
||||||
|
cache[item.fileName] = data; |
||||||
|
}); |
||||||
|
promises.push(promise); |
||||||
|
} else { |
||||||
|
// 地址不存在时提示
|
||||||
|
console.log(`附件${item.fileName}地址错误,下载失败`); |
||||||
|
} |
||||||
|
} |
||||||
|
Promise.all(promises).then(() => { |
||||||
|
zip.generateAsync({ type: "blob" }).then((content) => { |
||||||
|
// 生成二进制流
|
||||||
|
FileSaver.saveAs(content, zipName); // 利用file-saver保存文件 zipName: 自定义文件名
|
||||||
|
callback && callback() |
||||||
|
}); |
||||||
|
}).catch((res) => { |
||||||
|
console.log("文件压缩失败"); |
||||||
|
}); |
||||||
|
} |
Loading…
Reference in new issue