js 前端下载文件并压缩保存到本地

第一步下载包

npm i jszip save-as-file -S

第二步引入包

import JSZip from "jszip";
import saveFile from "save-as-file";

第三步使用


const zip = new JSZip();
const cache = {};
const promises = [];
batchDownLoadZip(["http://xxx.jpg","http://xxx.png",],"压缩文件名称"
);
function batchDownLoadZip(fileList, zipName) {return new Promise((resolve, reject) => {fileList.forEach((item, index) => {// item.fileUrl.split('?')[0] 处理fileList里的url地址 去除?号和后面的字符串const promise = getImgArrayBuffer(item.split("?")[0]).then((data) => {// 下载文件, 并存成ArrayBuffer对象// item.fileName fileList里的文件名zip.file(index + ".png", data, { binary: true }); // 逐个添加文件cache[item.fileName] = data; // 可要可不要 用来打印查检查添加了那些文件}).catch((e) => {console.log("文件访问失败");});promises.push(promise); // 加到promises队列里});Promise.all(promises).then(() => {// 异步队列全部完成时 执行下面代码console.log("开始压缩");zip.generateAsync({ type: "blob" }).then((content) => {// 生成二进制流console.log("压缩成功", content);saveFile(content, zipName);console.log("文件保存成功");resolve();}).catch((e) => {console.log("下载失败");reject(e);});}).catch((e) => {console.log("压缩失败");reject(e);});});
}
function getImgArrayBuffer(href) {return new Promise((resolve, reject) => {// 通过请求获取文件blob格式const xmlhttp = new XMLHttpRequest();xmlhttp.open("GET", href, true);xmlhttp.responseType = "blob";xmlhttp.onload = function() {if (this.status === 200) {resolve(this.response);} else {reject(this.status);}};xmlhttp.send();});
}

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

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

相关文章

如何使用批量重命名的方法替换重复文件名内容

在文件管理过程中,我们有时会遇到文件名中包含相同部分内容的情况,这不仅会使文件显得混乱,而且还会给文件检索和使用带来不便。为了解决这个问题,我们可以使用云炫文件管理器批量重命名进行批量替换。下面是如何使用这种方法进行…

机器学习---使用 TensorFlow 构建神经网络模型预测波士顿房价和鸢尾花数据集分类

1. 预测波士顿房价 1.1 导包 from __future__ import absolute_import from __future__ import division from __future__ import print_functionimport itertoolsimport pandas as pd import tensorflow as tftf.logging.set_verbosity(tf.logging.INFO) 最后一行设置了Ten…

面试测试工程师一般问什么问题?

面试和项目一起,是自学路上的两大拦路虎。面试测试工程师一般会被问什么问题,总结下来一般是下面这4类: 1.做好自我介绍 2.项目相关问题 3.技术相关问题 4.人事相关问题 接下来,主要从以上四个方向分别展开介绍。为了让大家更有获…

[双指针](一) Leetcode 283.移动零和1089.复写零

[双指针] Leetcode 283.移动零和1089.复写零 移动零 283. 移动零 1.题意分析 (1) 给你一个数组,将数组中的所有0移动到数组的末尾 (2) 保证非0元素在数组中相对位置不变 (3) 在原数组中操作 2.解题思路 由于题目要求我们移动数组内容(也就是交换两…

离线语音通断器开发-稳定之后顺应新需求

使用云知声的US516p6方案开发了一系列的离线语音通断器,目前已经取得了不小的收获,有1路的,3路的,4路的,唛头和扬声器包括唛头线材也在不断的更新打磨中找到了效果特别好的供应商。 离线语音通断器,家用控…

Beyond Compare比较规则设置 Beyond Compare怎么对比表格

在对文件进行比较时,文件夹内的文件可能存在不同类型、不同后缀名、不同内容等差异,这些差异会影响具体的比较结果,因此需要我们对软件的比较规则进行一些设置。接下来就让我们一起来学习一下Beyond Compare比较规则设置,Beyond C…

ruoyi设置会话超时时间

起因:数据库查询过慢,导致框架默认超过了默认时间,从而导致当前会话自动断开 解决方案: pom datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:connectTimeout: 60000socketTimeout: 60000 DruidProperties Value("${spring.datasource.druid.connectTim…

Hafnium启动过程分析

安全之安全(security)博客目录导读 目录 一、在安全世界中加载Hafnium和安全分区 二、通过TF-A启动 1、SP manifests 2、安全分区包 3、描述安全分区

重构之美:Java Swing中 如何对指定行文本进行CSS样式渲染,三种实现思路分享

文章目录 需求分析Document 应用彩蛋 需求分析 在Swing中,如果期望实现对JTextArea 或者 TextPane等文本区域实现单行渲染改怎么做?如上图所示 总的来说有两种实现方案 文本行数可控,那么构造一组JLabel集合按表单顺序添加,这样可…

松下A6B伺服 马达不动问题解决

本人在用信捷XDH plc ethercat总线,连松下A6B伺服,轴配置完成轴调试时,出现能使能,但 马达不动的情况。 开始总怀疑时信捷PLC的原因,后面查明是输入口定义引起的。 用USB线连接伺服,打开PANAPARM软件,自…

Python之函数-可变形参

Python之函数-可变形参 可变参数 可变位置参数 在形参前使用 * 表示该形参是可变位置参数,可以接受多个实参 它将收集来的实参组织到一个tuple中 可变关键字参数 在形参前使用 ** 表示该形参是可变关键字参数,可以接受多个关键字参数它将收集来的实参的…

QT 自定义抽屉式窗口,上层覆盖下层界面,下层布局不改变

一、自定义需要弹出的窗口(弹出按钮放在该窗口,且外发按钮信号),注:需要设置背景色,不然弹出是透明的(不知道原因) 二、主窗口初始化 int m_popBtnWidth 0;int m_beginPosX 0;int…

在Mac上安装MongoDB 5.0

MongoDB 5.0安装 1、环境描述 操作系统:macOS 14.0 (23A344) 2、安装MongoDB 2.1、tar解压包安装 下载地址:Download MongoDB Community Server | MongoDB 创建一个目录,以便数据库将文件放入其中。(默认情况下,数据…

linux--

一、crond 任务调度 1、原理示意图 2、crontab 进行定时任务的设置 2.1. 概述 任务调度,是指系统在某个时间执行的特定的命令或程序。任务调度分类: 系统工作: 有些重要的工作必须周而复始地执行。如病毒扫描等 个别用户工作:个别用户可能希望执行某些…

深度学习:张量 介绍

张量[1]是向量和矩阵到 n 维的推广。了解它们如何相互作用是机器学习的基础。 简介 虽然张量看起来是复杂的对象,但它们可以理解为向量和矩阵的集合。理解向量和矩阵对于理解张量至关重要。 向量是元素的一维列表: 矩阵是向量的二维列表: 下标…

Ajax学习笔记第三天

做决定之前仔细考虑,一旦作了决定就要勇往直前、坚持到底! 【1 ikunGG邮箱注册】 整个流程展示: 1.文件目录 2.页面效果展示及代码 mysql数据库中的初始表 2.1 主页 09.html:里面代码部分解释 display: inline-block; 让块元素h1变成行内…

vscode插件开发

开发 Visual Studio Code (VSCode) 插件需要使用 TypeScript 或 JavaScript 语言,并使用 VSCode 提供的插件 API。以下是一个简单的示例,演示如何创建一个 VSCode 插件来显示 “Hello World” 的消息。 步骤 1:准备开发环境 首先&#xff0…

OpenCV C++ 图像处理实战 ——《缺陷检测》

OpenCV C++ 图像处理实战 ——《缺陷检测》 一、结果演示二、缺陷检测算法2.1、多元模板图像2.2、训练差异模型三、图像配准3.1 功能源码3.1 功能效果四、多元模板图像4.1 功能源码五、缺陷检测5.1 功能源码六、源码测试图像下载总结一、结果演示

pytorch笔记:TRIPLETMARGINLOSS

1 介绍 创建一个衡量三元组损失的标准,给定输入张量 x1​、x2​ 和 x3​ 以及一个大于0的间距值。这用于测量样本之间的相对相似性。一个三元组由a、p和n组成(锚点、正例和负例)。所有输入张量的形状都应为 (N,D) 2 基本使用方法 torch.nn.…

AD9371 官方例程HDL详解之JESD204B RX侧格式配置

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 采样率和各个时钟之间的关系 : AD9371 官方例程HDL详解之JESD204B TX侧时钟生成 (三) 参考资料: UltraScale Architecture G…