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();
      });
    },

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

揭秘四川古力未来科技抖音小店:创新优势引领电商新风潮

在当下这个数字化、网络化的时代,电商行业正以前所未有的速度迅猛发展,而抖音小店作为其中的佼佼者,凭借其独特的平台优势和创新的经营模式,吸引了越来越多的消费者和商家。其中,四川古力未来科技抖音小店凭借其显著的…

【无标题】ubuntu环境手把手配置mmdetection

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ubuntu环境手把手配置mmdetection 前言一、环境安装配置1.安装conda环境2.安装pytorch3.安装 MMEngine 和 MMCV4.安装mmdet 二、测试环境1.我们需要下载配置文件和模型权重文…

vue2中npm i报错gyp info it worked if it ends with ok

当我拿到一个老的vue2项目,怎么也起不起来,后来找到报错原因,如上图所示,可以看到报错的path是node-sass,那么就猜想应该是sass版本和node版本不匹配。 于是我查看了我的node版本是16 而sass版本是下图所示&#xff0c…

centos7.8 迁移为 TencentOS Server 2.4(TK4) 报错解决

文章目录 一 问题二 解决三 注意 一 问题 CentOS 官方计划停止维护 CentOS Linux 项目,公司某台腾讯云的centos7.8服务器计划迁移为 TencentOS Server 2.4(TK4) 。在下载rpm包执行迁移命令后报错,场景还原如下。 首先 安装 Python 3 yum install -y p…

YOLOV8实战-和平精英敌我检测

YOLOV8实战,从环境配置、数据准备、数据标注、模型训练、模型导出到源码分享 前言:效果展示图片展示视频展示 简介:**【YOLOV8是啥?】****【YOLOV8能干啥?有啥应用场景?】** 一、环境准备1、新建一个虚拟环…

VBA在Excel中登录页面的应用—动态密码设置

https://mp.weixin.qq.com/s?__biz=MzkwMzY1OTIzOA==&mid=2247484420&idx=1&sn=5f98ef156cd6a784f0b1e64eed11ee42&chksm=c093af8df7e4269bdda3ed4adc37ce5f30707760ad42a2e0c6c3278ff0a0c5fcaf890016f9b5&token=1012529499&lang=zh_CN#rd 文章目录 …

css中用于设置光标颜色的属性

caret-color 是一个 CSS 属性,它用于定义输入光标(caret)的颜色。这里的“插入光标”(insertion caret)指的是在网页的可编辑器区域内,用来指示用户的输入具体会插入到哪里的那个一闪一闪的形似竖杠 | 的东…

正则化 缓解过拟合

缓解过拟合:收集更多的训练数据、正则化 权重衰减也被称为 L 2 L_{2} L2​正则化 如果我们的权重向量增长的太大, 我们的学习算法可能会更集中于最小化权重范数 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w∣∣2。 为了惩罚权重向量的大小, 我们必须以某…

OCR技术在增值税发票数据分析中的应用

OCR技术在增值税发票数据分析中的应用,为企业的财务管理和商业决策注入了新的活力。随着数字化时代的来临,企业面临着海量的数据处理挑战,如何高效、准确地从这些信息中提炼出有价值的数据,成为企业提升竞争力的关键。OCR技术&…

6.Labview使用子vi进行VI间的数据传递详解(模块化)

本文通过讲解建立子VI的方式来进行VI间的数据传递方式。 大家可以将子VI理解为一个可以被调用的子程序,我们把某个程序中的一部分程序封装成一个模块以后就可以在其他的程序里边调用这一个模块。 题注: 那么我们为什么要把子VI封装成一个模块呢&#xff…

C语言学习【C语言基本数据类型二】

C语言学习【C语言基本数据类型二】 _Bool类型 C99标准添加了_Bool类型,用于表示布尔值,即逻辑值true和false,原则上仅占用1位存储空间; float、double和long double 记数法示例 C标准规定,float类型必须至少能表示…

第33次CSP认证Q3:化学方程式配平

🍄题目描述 为了配平一个化学方程式,我们可以令方程式中各物质的系数为未知数,然后针对涉及的每一种元素,列出关于系数的方程,形成一个齐次线性方程组。然后求解这个方程组,得到各物质的系数。这样&#x…

免费SSL证书获取与部署教程

在互联网时代,HTTPS已成为网站安全的基石,为用户数据传输提供加密保障。免费SSL证书的出现降低了部署HTTPS的门槛,尤其对于个人网站、小微企业及测试环境而言,它们是理想的选择。本文旨在提供一份详尽指南,帮助您轻松获…

QLExpress入门及实战总结

文章目录 1.背景2.简介3.QLExpress实战3.1 基础例子3.2 低代码实战3.2.1 需求描述3.2.1 使用规则引擎3.3.2 运行结果 参考文档 1.背景 最近研究低代码实现后端业务逻辑相关功能,使用LiteFlow作为流程编排后端service服务, 但是LiteFlow官方未提供图形界面编排流程。…

穿越网络界限:探索NAT IPv4的神秘面纱

欢迎来到我的博客,代码的世界里,每一行都是一个故事 穿越网络界限:探索NAT IPv4的神秘面纱 前言NAT IPv4概述NAT IPv4的类型NAT IPv4的工作流程NAT IPv4的局限性和挑战 前言 在我们日常的网络使用中,我们或多或少都会遇到NAT&…

SAP:FI 财务凭证行项目文本前台修改

一、问题描述 财务凭证行项目文本点击修改,但是前台有的行可以修改,有的行是灰色的不能修改,如下图所示,这个文本信息有误,必须修改怎么办? 二、思路分析 有的行可以修改,有的行不能修改&#x…

【MySQL数据库】初步认识数据库,实现基本操作

在信息爆炸的今天,数据无处不在,它们构成了互联网世界的基石。但数据本身若未经有效组织和管理,就如同散落在沙滩上的珍珠,难以发挥其真正的价值。这时,“数据库”这一概念便如同一根线,将这些珍珠串联起来…

position:fixed无法固定到父盒子上面的解决方案

目录 问题如图所示: 下面是错误的代码: 解决方案1: 使用fixed固定定位固定到父元素: 解决方案2: 推荐使用的其他方案(粘性定位): 什么是粘性定位: 粘性定位的使用…

答辩PPT设计太耗时?aippt工具,AI一站式服务

这些网站我愿称之为制作答辩PPT的神! 很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路,一窍不通。但这并不是你们的错,对于平时没接触过相关方面,第一次搞答辩PPT的人来说,这是很正常的一件事。一个好的答辩PPT…

搞懂Docker(九)- 使用Docker Compose

获取示例程序 示例程序 或者 示例程序 获取示例程序程序结构如下├── getting-started-app/ │ ├── package.json │ ├── README.md │ ├── spec/ │ ├── src/ │ └── yarn.lock使用Docker Compose Docker Compose是一个帮助你定义和共享多容器应用程序的工具…