vue将文件/图片批量打包下载zip的教程
(编辑:jimmy 日期: 2025/10/26 浏览:3 次 )
vue将文件/图片批量打包下载
各种格式都可以,只要url能够打开或者下载文件即可.
1.通过文件的url,使用js的XMLHttpRequest获取blob
2.将blob压缩为zip
由于异步并行加载文件,速度还是蛮快的,我141个4M多的图片,1分左右加载完成,49个4M的图片4秒
添加依赖
//npm install jszip
//npm install file-saver
在页面的script中引入依赖
import JSZip from 'jszip'
import FileSaver from 'file-saver'
代码
/**文件打包
* arrImages:文件list:[{fileUrl:文件url,renameFileName:文件名}]
* filename 压缩包名
* */
filesToRar(arrImages, filename) {
let _this = this;
let zip = new JSZip();
let cache = {};
let promises = [];
_this.title = '正在加载压缩文件';
for (let item of arrImages) {
const promise= _this.getImgArrayBuffer(item.fileUrl).then(data => {
// 下载文件, 并存成ArrayBuffer对象(blob)
zip.file(item.renameFileName, data, { binary: true }); // 逐个添加文件
cache[item.renameFileName] = data;
});
promises.push(promise);
}
Promise.all(promises).then(() => {
zip.generateAsync({ type: "blob" }).then(content => {
_this.title = '正在压缩';
// 生成二进制流
FileSaver.saveAs(content, filename); // 利用file-saver保存文件 自定义文件名
_this.title = '压缩完成';
});
}).catch(res=>{
_this.$message.error('文件压缩失败');
});
},
//获取文件blob
getImgArrayBuffer(url){
let _this=this;
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();
});
},
补充知识:vue 生成二维码并且批量打包下载代码
我就废话不多说了,大家还是直接看代码吧~
<template>
<div>
<div v-show="codeId" ref="QrcodePage" style="z-index:-1111;position:absolute;left:-99999;width: 450px;height: 475px;background-size: cover;">
<div id="qrCode" v-if="codeId">
<QrcodeVue :logoSrc="imageUrl" :key="random" :callback="texte" :text="codeValue" :logoScale="50" :size="750"></QrcodeVue>
<p style="text-align: center; font-size: 1.5625rem;">{{ codeNumber }}</p>
</div>
</div>
</div>
</template>
<script>
let loadingInstance = '';
import QrcodeVue from 'vue-qr';
import html2canvas from 'html2canvas';
import JSZip from 'jszip';
import FileSaver from 'file-saver';
export default {
name: 'qrcode',
components: {
QrcodeVue
},
data() {
return {
random: '1',
codeId: '',
qrcodeUrl: '',
imageUrl: '',
// imageUrl: 'https://shop.mmdddd.com/workShopWeb/static/img/72.png',//logo
qrContentImage: '',
codeValue: '',
initCodeVal: 'http://xcx.nmte.net/tips/index.html',
codeNumber: '',
arr: [],
qrcodeArr: [],
index: 0
};
},
watch: {
index(newName, oldName){
if(newName != oldName && newName <= this.arr.length-1){
setTimeout(_ => {
this.setarr(this.arr);
}, 0);
}else {
this.$nextTick(_ => {
loadingInstance.close();
});
}
}
},
created() {
},
mounted() {},
methods: {
texte(url,qid) {
setTimeout(_ => {
this.createImgs();
}, 100);
},
setarr(arr) {
this.arr = arr;
if(this.index > this.arr.length -1) {
this.index = 0;
}
let index=this.index||0;
loadingInstance = this.$Loading.service({
lock: true,
text: '二维码码批量下载中,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.codeNumber = this.arr[index].codeNumber;
this.arr[index].codeId "blob"}).then(content => {
FileSaver.saveAs(content, "二维码.zip")
})
},0)
}
}
};
</script>
<style lang="less" scoped="scoped">
#qrCode {
width: 375px;
height: 375px;
position: absolute;
top: 52%;
left: 50%;
transform: translate(-50%, -50%);
img {
display: block;
width: 100%;
height: 100%;
}
}
</style>
调用setarr传数组
以上这篇vue将文件/图片批量打包下载zip的教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
下一篇:uniapp实现可滑动选项卡

