多文件需要一次性下载为zip文件
这是近期遇到的一个需求,本身是多文件上传的,下载时单个下载太慢又繁杂,用户希望能一次性批量下载,就选择了jszip
import axios from "axios"
import JSZip from "jszip"
import FileSaver from "file-saver"
const getFile = url => {
return new Promise((resolve, reject) => {
axios({
headers: {
'Cache-control': 'no-cache'
},
method: "get",
url,
responseType: "arraybuffer"
})
.then(data => {
resolve(data.data)
})
.catch(error => {
reject(error)
})
})
}
const downloadFromAliOss = function (fileArr, zipName) {
const zip = new JSZip()
const promises = []
fileArr.forEach(item => {
const promise = getFile(item.url).then(data => {
const url = new URL(item.url)
// 获取文件类型
// const type = url.pathname.split('.').pop() // 'jpg'
// const typeArr = item.url.split(".")
// const type = typeArr[typeArr.length - 1]
// 默认文件名·
// const nameArr = item.url.split("/")
const name = item.name || url.pathname.split('/').pop()
// const foldPath = item.foldPath || ""
zip.file(name, data, {
binary: true
})
})
promises.push(promise)
})
Promise.all(promises).then(() => {
zip.generateAsync({ type: "blob" }).then(content => {
FileSaver.saveAs(content, zipName || `文件.zip`)
})
})
}
export default downloadFromAliOss
调用
downloadalioss(signedFileList, '附件.zip')