前端打包图片zip格式并下载

165 阅读1分钟
npm install JSZip 
npm install FileSaver 

如果npm 下载失败可尝试 yarn add FileSaver

js文件

import JSZip from 'jszip'

import FileSaver from 'file-saver'


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 (this.status == 200) {

resolve(this.response);

} else {

reject(this.status);

}

};

xmlhttp.send();

});

}

\


const downImage = (imagList, name ,fileName) => {

console.log(imagList, name,'imagList, name')

return new Promise((resolve, reject) => {

let zip = new JSZip();

let cache = {};

let promises = [];

for (let item of imagList) {

const promise = getImgArrayBuffer(item.url).then((data) => {

// 下载文件, 并存成ArrayBuffer对象(blob)

zip.file(item.id + ".jpg", data, { binary: true }); // 逐个添加文件

cache[item.id] = data;

});

promises.push(promise);

}

Promise.all(promises)

.then(() => {

zip.generateAsync({ type: "blob" }).then((content) => {

// 生成二进制流

FileSaver.saveAs(content, '打包商品' + name+ "-商品id:" + fileName); // 利用file-saver保存文件 自定义文件名

resolve();

});

})

.catch(() => {

reject();

});

})

}


export default downImage;

在组件页面引入js文件

调用方法


//this.images 是要下载的图片数组 [{url: 图片地址, id: 图片名称}]


downImage(this.images,name,fileName)

.then(() => {

this.loading && this.loading.close();

this.$message({

message: "下载完成!",

type: 'success'

});

})