关于JSZIP压缩图片打包下载的一些用法

article/2025/10/4 8:07:57

功能介绍

        前端在处理一些批量文件或者图片时候,通过使用异步上传,减少表单一次性提交的的数据量。并将这些图片或者文件根据用户自定义压缩、分类保存到本地。是一个用于压缩文件和解压的JavaScript库。

官网地址

https://stuk.github.io/jszip/documentation/api_jszip.html

使用

yarn add jszip                         //安装jszip,用于压缩文件

yarn add file-saver                 //安装file-saver 来保存导出文件

导出效果如下:

官网示例Demo

var zip = new JSZip();
zip.file("Hello.txt", "Hello World\n");
var img = zip.folder("images");
img.file("smile.gif", imgData, { base64: true });    //imgData为图片文件
zip.generateAsync({ type: "blob" }).then(function (content) {FileSaver.saveAs(content, "example.zip");  });

 属性

file(name,data,options)

  • name:压缩包中的文件名称以及文件类型,如***.txt , ***.png等
  • data:数据源或者文件内容
  • options:配置参数

直接导出文件压缩demo 

var zip = new JSZip();
//导出的文件内有一个hello.txt文件,内容为hello world
zip.file("Hello.txt", "Hello World\n"); 
zip.generateAsync({ type: "blob" }).then(function (content) {FileSaver.saveAs(content, "example.zip");  
});

options参数 

参数名

类型

意义

base64

boolean

如果数据是base64编码的则设置为true。例如,来自元素的图像数据。默认值为false

binary

boolean

导出文本中如果有特殊符号代码等参数,则设置为true,如果base64属性为true,则保持默认即可

date

date

文件的最后修改日期

compression

string

压缩参数,STORE默认不压缩,DEFLATE需要压缩,与generateAsync(options) 一致

compressionOptions

Object

当压缩文件时需要的参数,同generateAsync(options)

comment

string

文件注释

optimizedBinaryString

boolean

当(且仅当)输入是一个“二进制字符串”并且已经准备了0xFF掩码时设置为true。

createFolders

boolean

如果文件路径中的文件夹需要自动创建,则设置为true,否则将只有表示文件路径的虚拟文件夹。

unixPermissions

16 bits

unix权限操作,例如755,644等

dosPermissions

6 bits

dos权限操作,例如755,644等

dir

boolean

如果为true,导出的都为文件夹

base64  Demo

var zip = new JSZip();
//打开后为hellow world
zip.file("Hello.txt", "aGVsbG8gd29ybGQK", { base64: true });
zip.generateAsync({ type: "blob" }).then(function (content) {FileSaver.saveAs(content, "example.zip");});

 binary   Demo

var zip = new JSZip();
zip.file("hello.txt", "unicode ♥", { binary: false }); 
//binary为false时,特殊符号代码导出为乱码形式
zip.file("hello.txt", "unicode \xE2\x99\xA5", { binary: true });  
zip.generateAsync({ type: "blob" }).then(function (content) {FileSaver.saveAs(content, "example.zip");});

date   Demo

var zip = new JSZip();
zip.file("hello.txt", "unicode \xE2\x99\xA5", {binary: true,date: new Date("October 25, 2022 17:39:01")  //导出的文件最后求改日期为2022-10-25
});
zip.generateAsync({ type: "blob" }).then(function (content) {FileSaver.saveAs(content, "example.zip");});

compression   Demo

var zip = new JSZip();
zip.file("hello.txt", "unicode \xE2\x99\xA5", {binary: true,date: new Date("October 25, 2022 17:39:01")
});
zip.generateAsync({type: "blob",   //压缩类型compression: "STORE",compressionOptions: {  // STORE:默认不压缩 DEFLATE:需要压缩level: 1    // 压缩等级1~9    1压缩速度最快,9最优压缩方式  // [使用一张图片测试之后1和9压缩的力度不大,相差100字节左右]}
}).then(function (content) {FileSaver.saveAs(content, "example.zip");});

 comment

      多文件打入Zip文件是,有些文件不需要重复上传或者需要做特别的说明是,生成文件的时候也可以使用“comment”属性,java后台通过解压Zip,可以直接获取"comment"属性,如: zipEntry.getComment()。

var zip = new JSZip();
zip.file("hello.txt", "unicode \xE2\x99\xA5", {binary: true,comment: "测试文件hello"
});
zip.generateAsync({type: "blob",   //压缩类型
}).then(function (content) {FileSaver.saveAs(content, "example.zip");});

createFolders  Demo

zip.file("a/b/c/d.txt", "content", {createFolders: true // default value
});
console.log(zip.files);
// will display:
// - a/
// - a/b/
// - a/b/c/
// - a/b/c/d.txtzip.file("a/b/c/d.txt", "content", {createFolders: false
});
console.log(zip.files);
// will display:
// - a/b/c/d.txt

createFolders为true时:

createFolders为false时:

 导出函数generateAsync()

参数名

类型

意义

onUpdate

function

压缩的回调函数,有两个值

currentFile:当前正在压缩的文件

percent:导出进度(number)

 onUpdate Demo

var zip = new JSZip();
zip.file("a/b.txt", "unicode \xE2\x99\xA5", {binary: true,dir: true
});
zip.generateAsync({type: "blob",   //压缩类型
}, (Update) => {console.log(Update);
}).then(function (content) {FileSaver.saveAs(content, "example.zip");});

打印结果:

导出压缩包,压缩包下存放自定义文件夹 

var zip = new JSZip();
const hello = zip.folder("hello")  //压缩包下新建一个hello的文件夹
hello.file("Hello.txt", "Hello World\n");
zip.generateAsync({ type: "blob" }).then(function (content) {FileSaver.saveAs(content, "example.zip");  
});

 在项目中的略微复杂的用法:

  //导出export = () => {const { fileList } = this.statemessage.info({ content: "图片正在压缩导出,请稍等...", key: 'export', duration: 0 })this.toZip(fileList, fileList.map(e => e.name))}toZip = (imgSrcList, fileName) => {//筛选要分类的文件名,由于文件名可能出现重复,所以筛选去重(这里是根据地理位置分类命名文件名)let ExportTitle = imgSrcList.map((item) => {return item.classInfo ? item.classInfo : "暂无小班定位信息"})let newExportTitle = ExportTitle.filter((item, index, arr) => {return arr.indexOf(item) == index;})let zip = new JSZip();  //实例化一个压缩文件对象let myNotesName = '导出结果';let imgFolder = newExportTitle.map((e) => {return zip.folder(e); //新建一个图片文件夹用来存放图片,参数为文件名})for (let i = 0; i < imgSrcList.length; i++) {let image = imgSrcList[i].shuiYinFilelet imageNames = `${fileName[i]}.png`;imgFolder.forEach(element => {if (imgSrcList[i].classInfo === element.root.replace('/', "")) {element.file(imageNames, image, { base64: false })} else if (element.root.replace('/', "") === "暂无小班定位信息") {element.file(imageNames, image, { base64: false })}});}zip.generateAsync({type: "blob",//压缩类型compression: "DEFLATE",   // STORE:默认不压缩 DEFLATE:需要压缩compressionOptions: {level: 1  // 压缩等级1~9    1压缩速度最快,9最优压缩方式  // [使用一张图片测试之后1和9压缩的力度不大,相差100字节左右]},}).then(function (content) {message.success({ content: "压缩包导出成功", key: 'export', duration: 3 })FileSaver.saveAs(content, `${myNotesName}.zip`);});}

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

相关文章

jsZip将多个文件压缩成一个压缩包

在项目开发中&#xff0c;搭档大佬要做一个断点续传的功能&#xff0c;让我帮忙研究一下前端将多个文件压缩成一个压缩包的方法&#xff0c;所以就有了这篇文章。 我的demo是写在vue中的&#xff0c;所以首先要有一个vue环境&#xff0c;才能进行接下来的步骤。那么下面我们就…

前端vue使用jszip压缩文件

一.引入element的上传文件组件 <el-form-item label"文件"><el-uploadclass"upload-demo"dragaction"https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"multiple:before-upload"beforeUpload"><el-icon …

vue3中使用jszip压缩文件

1、安装依赖 npm install jszip npm install file-saver --save 2、使用 <template><el-card class"mb15"><template #header><span>jszip</span></template><!-- 二维码容器 --><div id"qrCodeBox">&…

docxtemplater、pizzip、jszip-utils、file-saver 前端实现导出word

一、准备工作 1、插件安装&#xff1a; npm i docxtemplater pizzip jszip-utils file-saver -S2、安装完成&#xff1a; 3、导出的模板文件。 我这里是将其命名word-export.docx,并将其放在public/docxs目录下&#xff0c;如图所示&#xff1a; 二、实现代码 页面使用&…

【sduoj】前端JSZip库的使用

2021SCSDUSC 文章目录 JSZIP安装使用引入实例化读取zip文件读取压缩包中的文件遍历压缩包内的所有文件&#xff08;单层&#xff09; 小结 JSZIP JSZip是一个用于创建、读取和编辑.zip文件的javascript库&#xff0c;具有好用而简单的 API。 安装 在sduoj项目中&#xff0c…

zipJS 前端压缩使用

前端在处理文件时&#xff0c;对于大文件或者多个文件上传、下载、编辑&#xff0c;直接使用原文件不方便&#xff0c;最近使用一个可以前端中处理 zip 文件的库&#xff0c;JSzip&#xff0c;主要功能&#xff1a;前端中压缩、解压缩、编辑zip文件。 在 nodeJS 中&#xff0…

一篇文章介绍JSZip预览压缩包中的文件

安装依赖 npm i jszip 前提准备 准备好一个压缩包&#xff0c;格式为zip&#xff0c;存放两张png图片。 代码实现 <template><h1>JSZip,预览压缩包中的文件</h1><img v-for"(n,m) in picArr.arr":src"n":style"{width:200px}&qu…

VUE+jszip实现下载多个文件导出为一个zip格式

项目需求&#xff1a;将多个文件/图片导出为一个zip格式压缩包&#xff0c;点击<下载全部附件>按钮下载上面三个文件 1、安装jszip和file-saver插件 npm install jszip npm install file-saver2、在所需页面引入 import JSZip from "jszip";import FileSaver …

前端js使用jszip实现文件压缩功能

一、jszip下载 1、github下载地址&#xff1a;https://github.com/Stuk/jszip 2、下载成功后解压&#xff0c;js插件在dist目录里 二、引入jszip插件 <script type"text/javascript" src"./jszip.min.js"></script> 三、使用jszip对文件进…

JSZip 的简单介绍

1、前言 前端处理一些批量文件或者图片时候&#xff0c;通过使用异步上传&#xff0c;减少表单一次性提交的的数据量。但是图片或者文件有删除的时候&#xff0c;服务器上真实的图片不容易删除。找了一些资料发些了JSZip这个技术&#xff0c;可以将文件或者图片打包成一个Zip文…

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

使用jszip和file-saver导出图片&#xff0c;并打包为zip&#xff1a; import JSZip from "jszip"; import FileSaver from "file-saver"; 一&#xff0c;jszip解压缩 使用loadAsync&#xff0c;zipFile为压缩包&#xff0c;下面的例子表示读取zip中的resul…

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…