管理后台需要批量导出选中的图片
选择相应的图片批量导出或直接批量导出并压缩在一个文件夹里
1.先将选中二维码的地址存在一个数组中
2.依次请求图片并将其下载
3.后用jszip压缩文件
4.最后用file-saver生成文件
import axios from 'axios'
import JSZip from 'jszip'
import FileSaver from 'file-saver'
methods: {
// 赛选出选中的图片
downloadImgAll () {
let arr = [] //将图片地址存入该数组
this.InforList.forEach(element => { // 获取到的所有图片
this.listArr.forEach(item => { // 选中图片的id
if (element.id == item) {
//RealmName 这个是动态获取的域名
//imgPath 图片地址
arr.push(this.RealmName + element.imgPath)
}
})
})
this.async(arr)
},
// 批量下载
async (selectImgList) {
const data = selectImgList;
const zip = new JSZip()
const cache = {}
const promises = []
data.forEach(item => {
const promise = this.getFile(item).then(data => { // 下载文件, 并存成ArrayBuffer对象
const arr_name = item.split("/");
let file_name = arr_name[arr_name.length - 1] // 获取文件名
// if (file_name.indexOf('.png') == -1) {
// file_name = file_name + '.png'
// }
zip.file(file_name, data, {
binary: true
}) // 逐个添加文件
cache[file_name] = data
})
promises.push(promise)
})
Promise.all(promises).then(() => {
zip.generateAsync({
type: "blob"
}).then(content => { // 生成二进制流
FileSaver.saveAs(content, "photo.zip") // 利用file-saver保存文件
})
})
},
// 下载文件
getFile (url) {
return new Promise((resolve, reject) => {
axios({
method: 'get',
url,
responseType: 'arraybuffer'
}).then(data => {
resolve(data.data)
}).catch(error => {
reject(error.toString())
})
})
}
}