vue前端下载——jszip压缩和解压,结合file-saver导出图片zip,每20个图片分一个目录

article/2025/10/4 8:38:34

使用jszip和file-saver导出图片,并打包为zip:

import JSZip from "jszip";
import FileSaver from "file-saver";

一,jszip解压缩

        使用loadAsync,zipFile为压缩包,下面的例子表示读取zip中的result.txt文件,输出内容。

const jszip = new JSZip()
jszip.loadAsync(zipFile).then((zip) => {zip.files["result.txt"].async("string").then(function (con) {console.log(con)});
})

二、jszip压缩 

        先搞个简单的压缩:使用jszip创建一个名为image.zip的压缩包,其中包含一个文本文档和一个文件夹。

zip.file("hello.txt", 'hello world');
zip.folder('testfolder');
zip.generateAsync({ type: "blob" }).then(function (content) {FileSaver.saveAs(content, "images.zip");
});

        再搞个文件夹包含文本文档的压缩:使用jszip创建一个名为image.zip的压缩包,其中包含一个testfolder文件夹,文件夹包含一个名为test.txt的文本文档。

zip.folder("testfolder").file('test.txt', '啦啦啦啦啦啦');
zip.generateAsync({ type: "blob" }).then(function (content) {FileSaver.saveAs(content, "images.zip");
});

        最后试着创建有规律的压缩包:使用jszip创建一个名为image.zip的压缩包,其中包含五个文件夹,每个文件夹包含20个文本文档,每个文本文档的名称是各自的序号,文档内容是各自的文件名去掉后缀,文件夹的名称是各自包含的起止文件序号,例如在名为1-20的文件夹中包含1.txt、2.txt、3.txt……20.txt

for (let i = 0; i < 5; i++) {let begin = i * 20 + 1;let end = (i + 1) * 20;let img = zip.folder("photos" + begin + "-" + end);for (let j = 0; j < 20; j++) {img.file(i * 20 + j + '.txt', i * 20 + j + '');}
}
zip.generateAsync({ type: "blob" }).then(function (content) {FileSaver.saveAs(content, "images.zip");
});

三、实现导出图片zip

1、获取图片url

目前只遇到过两种情况:

  • 通过dom获取,例如 卡片+多选按钮组 方式的展示形式,勾选导出,此时可根据dom获取url;
  • 通过接口获取;

总之能拿到有效url即可。

downLoad(amount) {let url2 = ''; // 照片let self = this;Axios.get(url2).then((res) => {let arr = [];for (let i = 0, len1 = res.data.length; i < len1; i++) {if (res.data[i].pictureUrl !== '') {arr.push(res.data[i])}}let result = [];for (let i = 0, len2 = arr.length; i < len2; i += 20) {result.push(arr.slice(i, i + 20));}self.packageImages(result)}).catch((err) => {console.log(err);})
}

 2、判断图片地址是否有效

        只下载有效图片,所以需要验证图片是否有效:大小不应为0,宽高不应为0。

async validateImage(pathImg) { // 验证图片地址是否有效var ImgObj = new Image();ImgObj.src = pathImg;return ImgObj.fileSize > 0 || (ImgObj.width > 0 && ImgObj.height > 0);
}

3、图片转base64

需要转为base64,以供后续保存图片。

getBase64(img) {function getBase64Image(img, width, height) {// width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小let canvas = document.createElement("canvas");canvas.width = width || img.width;canvas.height = height || img.height;let ctx = canvas.getContext("2d");ctx.drawImage(img, 0, 0, canvas.width, canvas.height);let dataURL = canvas.toDataURL();return dataURL;}let image = new Image();image.crossOrigin = 'Anonymous';image.src = img;let deferred = $.Deferred();if (img) {image.onload = function () {deferred.resolve(getBase64Image(image));};return deferred.promise();}
}

4、打包下载

        这里是每20张图片分一个目录,如果不需要分目录就不用将得到的图片拆成二维数组,直接打包就好。

packageImages(arr, index) {let self = this;let imgs = [];for (let i = 0; i < arr.length; i++) {for (let j = 0; j < arr[i].length; j++) {if (!arr[i][j].pictureUrl.match('base64,')) {imgs.push(arr[i][j]);}}}let imgBase64 = [];let imgsName = [];let imageSuffix = [];// 图片后缀let zip = new JSZip();for (let j = 0; j < imgs.length; j++) {let suffix = ".jpg";imageSuffix.push(suffix);this.getBase64(imgs[j].pictureUrl).then(function (base64) {imgBase64.push(base64.substring(22));let fileName = imgs[j].cardId;imgsName.push(fileName);}, function (err) {console.log(err);});}function tt() {setTimeout(function () {if (imgs.length === imgBase64.length) {for (let i = 0; i < arr.length; i++) {let begin = i * 20 + 1;let end = 0;if (arr[i].length < 20) {end = imgsName.length;} else {end = (i + 1) * 20}let img = zip.folder("photos" + begin + "-" + end);for (let j = 0; j < arr[i].length; j++) {img.file(imgsName[i * 20 + j].trim() + imageSuffix[i * 20 + j], imgBase64[i * 20 + j], {base64: true});}}zip.generateAsync({type: "blob"}).then(function(content) {FileSaver.saveAs(content, "images.zip");});} else {tt();}}, 100);}tt();
}

数据太多时下载时间很长,那页面等待时间也会很长,可以加上进度条,每20个打个包下载一个zip,更新进度条。

总结

        本篇实践了jszip的压缩与解压缩,使用jszip和file-saver新建了包含文本文档、图片、文件夹的压缩包,实现了分段打包。共勉!


http://chatgpt.dhexx.cn/article/QYPhaAEI.shtml

相关文章

Nginx工作原理和优化总结。

NGINX以高性能的负载均衡器&#xff0c;缓存&#xff0c;和web服务器闻名&#xff0c;驱动了全球超过 40% 最繁忙的网站。在大多数场景下&#xff0c;默认的 NGINX 和 Linux 设置可以很好的工作&#xff0c;但要达到最佳性能&#xff0c;有些时候必须做些调整。首先我们先了解其…

Nginx详细原理

1、Nginx高可用版原理 nginx采用主从架构&#xff0c;客户端发送请求给master&#xff0c;然后由master下发任务到worker实现。 2、nginx任务分配机制(worker工作机制) nginx中master和woker进程之间使用的不是一种轮询的方式而是争抢机制&#xff0c;由于worker不支持java语言…

nginx的工作原理及配置

nginx的工作原理及配置 nginx的模块与工作原理 nginx由内核和模块组成。其中&#xff0c;内核的设计非常微小和简洁&#xff0c;完成的工作也非常简单&#xff0c;仅仅通过查找配置文件将客户端请求映射到一个location block&#xff08;location是nginx配置中的一个指令&…

服务器 启动多个nginx_Nginx工作原理和优化总结

NGINX以高性能的负载均衡器,缓存,和web服务器闻名,驱动了全球超过 40% 最繁忙的网站。 在大多数场景下,默认的 NGINX 和 Linux 设置可以很好的工作,但要达到最佳性能,有些时候必须做些调整。首先我们先了解其工作原理。 一、Nginx的模块与工作原理 Nginx由内核和模块组成…

Nginx工作原理及基本使用

Nginx工作原理 Nginx默认采用多进程工作方式&#xff0c;Nginx启动后&#xff0c;会运行一个master进程和多个worker进程。其中master充当整个进程组与用户的交互接口&#xff0c;同时对进程进行监护&#xff0c;管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文…

Nginx系列一:Nginx介绍与Nginx工作原理分析

一&#xff1a;Nginx概述 Nginx ("engine x") 是一个高性能的轻量级的 HTTP 和反向代理、负载平衡web服务器。 nginx 的并发能力在同类型的网页服务器中表现较好市场占用率很高&#xff0c;中国大陆使用 nginx网站用户有&#xff1a;百度、京东、新浪、网易、腾讯、…

透彻!Ingress-nginx工作原理和实践,这操作可以吧

本文记录/分享 目前项目的 K8s 部署结构和请求追踪改造方案 这个图算是一个通用的前后端分离的 k8s 部署结构: Nginx Ingress 负责暴露服务(nginx前端静态资源服务)&#xff0c; 根据十二要素应用的原 则&#xff0c;将后端 api 作为 nginx 服务的附加动态资源。 Ingress vs I…

nginx的工作原理与nginx的配置

1、nginx的工作原理 nginx的模块直接被编译进nginx&#xff0c;因此属于静态编译方式。 启动nginx后&#xff0c;nginx的模块被自动加载&#xff0c;与Apache不一样&#xff0c;首先将模块编译为一个so文件&#xff0c;然后在配置文件中指定是否进行加载。 在解析配置文件时&am…

详解Nginx的核心原理

Nginx的核心原理 本节为大家介绍Nginx的核心原理&#xff0c;包含Reactor模型、Nginx的模块化设计、Nginx的请求处理阶段。 虽然本节的知识有一定的理论深度&#xff0c;但是与另一个有名的Java底层通信框架Netty在原理上有很多相似的地方。如果大家了解Netty的原理和Reactor…

nginx工作原理、配置以及web服务器的资源请求过程

nginx工作原理、配置以及web服务器的资源请求过程 1. nginx简介2. nginx的特性与优点2.1 nginx的特性2.2 nginx的优点2.3 nginx工作原理2.4 Nginx的模块从功能上分为如下三类&#xff1a; 3. nginx进程架构4. web服务器请求资源的过程5. nginx的配置6. nginx的安装与配置6.1 ng…

Nginx(1)— Nginx工作原理

Nginx的模块与工作原理 Nginx由内核和模块组成&#xff0c;其中&#xff0c;内核的设计非常微小和简洁&#xff0c;完成的工作也非常简单&#xff0c;仅仅通过查找配置文件将客户端请求映射到一个location block&#xff08;location是Nginx配置中的一个指令&#xff0c;用于U…

nginx工作原理与配置

nginx工作原理与配置 文章目录 nginx工作原理与配置nginx的模块与工作原理nginx的模块分类nginx的工作原理 nginx的安装与配置nginx安装nginx配置 nginx的配置文件详解nginx.conf配置详解用于调试、定位问题的配置参数https配置基于用户认证开启状态界面URLURL - 统一资源定位器…

Nginx工作原理和优化、漏洞

1. Nginx的模块与工作原理 Nginx由内核和模块组成&#xff0c;其中&#xff0c;内核的设计非常微小和简洁&#xff0c;完成的工作也非常简单&#xff0c;仅仅通过查找配置文件将客户端请求映射到一个location block&#xff08;location是Nginx配置中的一个指令&#xff0c;用…

nginx 工作原理

1. Nginx的模块与工作原理 Nginx由内核和模块组成&#xff0c;其中&#xff0c;内核的设计非常微小和简洁&#xff0c;完成的工作也非常简单&#xff0c;仅仅通过查找配置文件将客户端请求映射到一个location block&#xff08;location是Nginx配置中的一个指令&#xff0c;用…

nginx工作原理及配置

模块与工作原理 nginx由内核和模块组成。其中&#xff0c;内核的设计非常微小和简洁&#xff0c;完成的工作也非常简单&#xff0c;仅仅通过查找配置文件将客户端请求映射到一个location block&#xff08;location是nginx配置中的一个指令&#xff0c;用于URL匹配&#xff09…

Nginx工作原理

一、明确Nginx与Tomcat的区别 web上的server都叫web server&#xff0c;但是大家分工也有不同的。 nginx常用做静态内容服务和代理服务器&#xff0c;直面外来请求转发给后面的应用服务&#xff08;tomcat&#xff09;&#xff0c;tomcat更多用来做一个应用容器&#xff0c;让…

nginx工作原理详解

一、Nginx请求处理流程 图解&#xff1a; 进入nginx的大致三种流量&#xff1a;WEB、EMAIL及TCP Nginx中三个状态机&#xff1a; 传输层状态机&#xff1a;处理TCP/UDP四层传输层HTTP状态机&#xff1a;处理应用层MAIL状态机&#xff1a;处理邮件 状态机作用&#xff1a;Ngin…

nginx工作原理:

首先nginx,采用的是多线程&多路io复用模型,使用I/O多路复用技术的nginx,成就了”并发驱动”的服务器. nginx的框架模型: 进程组件角色: master进程: 监视工作进程的状态,当工作进程死掉后重启一个新的,处理信号和通知工作进程. work进程: 处理客户端请求,从主进程处获得…

原来使用 Spring 实现策略模式可以这么简单

策略模式作为一种软件设计模式&#xff0c;指对象有某个行为&#xff0c;但是在不同的场景中&#xff0c;该行为有不同的实现算法&#xff0c;可以替代代码中大量的 if-else。 比如我们生活中的场景&#xff1a;买东西结账可以使用微信支付、支付宝支付或者银行卡支付&#xf…

策略设计模式

介绍 Java策略模式(Strategy Pattern)是一种行为设计模式,它允许再运行时动态选择算法的行为.策略模式通过将算法封装在可互换的策略对象中,使得客户端代码能够轻松地切换算法,而无需修改原始代码.在策略模式中,每个算法都被实现为一个单独的策略类,这些策略类都实现了相同的接…