VUE 如何实现多个文件导出为一个zip格式并下载
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
·
项目需求:
将多个文件导出为一个zip格式压缩包,点击<批量下载>按钮下载选中的几个文件

1、安装jszip和file-saver插件
npm install jszip
npm install file-saver
2、在所需页面引入
import JSZip from "jszip";
import FileSaver from "file-saver";
3、模拟fileList数组
[
{
"answerName": "名字1",
"answer": "https://地址1"
},
{
"answerName": "名字2",
"answer": “https://地址2"
}
]
4、在methods中定义方法
// 下载全部附件 downloadBtn<下载全部附件>按钮绑定事件
downloadBtn() {
var blogTitle = `学生答案批量下载`; // 下载后压缩包的名称
var zip = new JSZip();
var promises = [];
let cache = {};
for (let item of this.fileList) {
// item.answer为文件链接地址
// item.answerName为文件名称
if (item.answer) {
const promise = this.getImgArrayBuffer(item.answer).then((data) => {
// 下载文件, 并存成ArrayBuffer对象(blob)
zip.file(item.answerName, data, {
binary: true
}); // 逐个添加文件
cache[item.answerName] = data;
});
promises.push(promise);
} else {
// answer地址不存在时提示
alert(`附件${item.answerName}地址错误,下载失败`);
}
}
Promise.all(promises).then(() => {
zip.generateAsync({
type: "blob"
}).then((content) => {
// 生成二进制流
FileSaver.saveAs(content, blogTitle); // 利用file-saver保存文件 blogTitle:自定义文件名
});
}).catch((res) => {
alert("文件压缩失败");
});
},
//文件以流的形式获取(参数url为文件链接地址)
getImgArrayBuffer(url) {
return new Promise((resolve, reject) => {
//通过请求获取文件blob格式
let xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url, true);
xmlhttp.responseType = "blob";
xmlhttp.onload = function() {
if (xmlhttp.status == 200) {
resolve(xmlhttp.response);
} else {
reject(xmlhttp.response);
}
};
xmlhttp.send();
});
},
以上为全部代码,缺点是有一定的等待下载时间,这个需要后续的处理
我在按钮的地方添加了一个loading特效来处理的
<el-button type="primary" size="small" @click="downloadBtn" :loading="btnloading">
{{ btnloading ? '下载中...' : '批量下载' }}
</el-button>
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
9e887079
[skip ci] 1 年前
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 1 年前
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)