前端打包下载

前端打包下载
寒霜本文代码以图片作为示例,进行文件批量下载
安装 axios,FileSaver,JSZip 三个插件
初始化 new JSZip
获取所有图片链接,并根据链接利用 axios 进行数据获取,blob 格式
每条数据获取成功后,利用 zip.file 保存起来,参数是文件名、文件数据,数据格式
所有数据都获取成功后,利用 zip.generateAsync 生成最终数据
数据生成成功后,利用 FileSaver.saveAs 保存数据,并设置压缩包名称
import axios from 'axios'
import FileSaver from 'file-saver'
import JSZip from 'jszip'
downAll: function () {
let that = this
const promises = []
let zip = new JSZip();
let downLinkArr = document.querySelectorAll('.downLink')
let arr = []
downLinkArr.forEach(item => {
arr.push(item.href)
})
arr.map(item => {
console.log(decodeURI(item)
let item_ = decodeURI(item)
let name = item_.split('/')
let name_ = name[name.length - 1]
console.log(name_);
const promise = that.getFile(item).then(res => {
zip.file(`${name_}`, res, {binary: true})
}).catch(() => {
this.$message.error('下载错误,请重新下载')
})
promises.push(promise)
})
Promise.all(promises).then(() => {
zip.generateAsync({type: 'blob'}).then(res => {
FileSaver.saveAs(res, new Date().getTime()
}).catch(() => {
this.$message.error('下载错误,请重新下载~')
})
})
},
getFile(url) {
return new Promise((resolve, reject) => {
axios({
method: 'get',
url: `${url}`,
responseType: 'blob',
})
.then((response) => {
resolve(response.data)
})
.catch((error) => {
reject(error.toString()
})
})
},