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数组

//fileList模拟文件数组export default {name: "notice-list",data() {return {fileList: [{originalName: '3.jpg',url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'},{originalName: '5.jpg',url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'},{originalName: '测试2.doc',url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'}],}}
}

4、在methods中定义方法

//批量下载文件batchDownload() {var blogTitle = `附件_${new Date().getTime()}`; // 下载后压缩包的名称var zip = new JSZip();var promises = [];let cache = {};for (let item of this.fileList) {// item.url为文件链接地址// item.originalName为文件名称if (item.url) {const promise = this.getImgArrayBuffer(item.url).then((data) => {// 下载文件, 并存成ArrayBuffer对象(blob)zip.file(item.originalName, data, { binary: true }); // 逐个添加文件cache[item.originalName] = data;});promises.push(promise);} else {// url地址不存在时提示this.$message.error(`附件${item.originalName}地址错误,下载失败`);console.log(`附件${item.originalName}地址错误,下载失败`);}}Promise.all(promises).then(() => {zip.generateAsync({ type: "blob" }).then((content) => {// 生成二进制流FileSaver.saveAs(content, blogTitle); // 利用file-saver保存文件  blogTitle:自定义文件名});}).catch((res) => {this.$message.error("文件压缩失败");});},//文件以流的形式获取(参数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();});},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/703884.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业大模型如何成为自己数据的“百科全书”?

作者 | 郭炜 编辑 | Debra Chen 在当今的商业环境中,大数据的管理和应用已经成为企业决策和运营的核心组成部分。然而,随着数据量的爆炸性增长,如何有效利用这些数据成为了一个普遍的挑战。 本文将探讨大数据架构、大模型的集成&#xff0…

Kubernetes集群部署

目录 引言 一、常见的K8S按照部署方式 (一)Minikube (二)Kubeadmin (三)二进制安装部署 二、二进制安装 (一)环境准备 1.部署安装环境 1.1 关闭防火墙与selinux 1.2 关闭s…

吴恩达深度学习笔记:优化算法 (Optimization algorithms)2.7

目录 第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周:优化算法 (Optimization algorithms)2.7 RMSprop 第二门课: 改善深层神经网络&am…

C# WinForm —— 21 RichTextBox 使用

1. 加载文件到控件中 加载文件时,要设置文件的路径和类型RichTextBoxStreamType,文件类型包含: RichText 0:富文本格式(RTF)流PlainText 1:纯文本流对象链接和嵌入(OLE&#xff…

恒创科技:域名CNAME解析和A记录解析有哪些区别?

​  域名是互联网上的一种地址,是用以替代复杂IP地址的字符标识,在进行域名解析时,主要有两种常见的记录类型:CNAME 记录和 A记录解析。今天就给大家讲下CNAME解析和A记录解析有哪些区别、优势。这里,我们先了解下什…

Kafka学习-Java使用Kafka

文章目录 前言一、Kafka1、什么是消息队列offset 2、高性能topicpartition 3、高扩展broker 4、高可用replicas、leader、follower 5、持久化和过期策略6、消费者组7、Zookeeper8、架构图 二、安装Zookeeper三、安装Kafka四、Java中使用Kafka1、引入依赖2、生产者3、消费者4、运…

OpenAI 震撼发布:GPT-4o免费,实时语音视频交互开启新纪元

OpenAI 震撼发布:GPT-4o免费,实时语音视频交互开启新纪元 在仅仅问世17个月后,OpenAI 研制出了仿佛科幻片中登场的超级人工智能——GPT-4o,而且所有人都可以完全免费使用,让这个科技界的巨浪让人震撼无比!…

【VUE】VUE3绘制箭头组件

效果预览&#xff1a; 长、宽、粗细等等根据情况合理调整即可。 组件&#xff1a; <template><div class"line" :style"props.arrowsColor"></div> </template><script setup> import { defineProps, ref, onMounted } fr…

代码随想录Day29

39.组合总和 题目&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;可以重复选取&#xff0c;这个要怎么回溯&#xff1f;而且是无限制的重复。每次回溯&#xff0c;都还是遍历当前的数组&#xff0c;记住数组中的最小值&#xff0c;一旦发现…

低成本、功能强大!德思特提供一体化WiFi 6E信道测试方案!

​ 作者介绍 一、方案介绍 伴随WiFi 6E与WiFi 7的提出&#xff0c;WIFI划分出一个全新的5.925GHz-7.125GHz 之间的80MHz和160MHz频段。1200MHz的带宽是迄今为止最宽的&#xff0c;是之前2.4GHz和5GHz WiFi 频段可用带宽的数倍。此外WiFi 6E引入了以下技术&#xff1a; ● 多…

Google I/O 2024:探索未来AI技术的无限可能

近日&#xff0c;Google I/O 2024大会圆满落幕&#xff0c;带给我们一场关于人工智能的盛宴。在这场大会上&#xff0c;Google推出了一系列令人激动的AI新功能和工具&#xff0c;让我们得以一窥未来的科技发展。今天&#xff0c;就让我来为大家总结一下这些亮点吧&#xff01; …

实验室无法培养的菌,原来可以这么研究!

厌氧氨氧化&#xff08;anammox&#xff09;细菌在全球氮循环和废水氮去除中发挥着至关重要的作用&#xff0c;由于anammox细菌生长缓慢、难以培养等特点&#xff0c;对其生态学和生物学特性知之甚少。近日&#xff0c;凌恩生物合作客户重庆大学陈猷鹏教授团队在《Science of t…