【sduoj】前端JSZip库的使用

article/2025/10/4 8:36:41

2021SC@SDUSC

文章目录

  • JSZIP
    • 安装
    • 使用
      • 引入
      • 实例化
      • 读取zip文件
      • 读取压缩包中的文件
      • 遍历压缩包内的所有文件(单层)
  • 小结

JSZIP

JSZip是一个用于创建、读取和编辑.zip文件的javascript库,具有好用而简单的 API。

安装

在sduoj项目中,可通过npmyarn进行安装

npm install jszip

yarn add jszip

使用

JSZip为开发者提供了诸多API可用于处理各类业务。具体API可参考: JSZip API
下面将展示部分示例:

引入

import JSZip from 'jszip';

script开头引入JSZip

实例化

在引入JSZip后,我们需要实例化JSZip对象。直接使用new关键字即可。

let jszip = new JSZip();

这样我们就得到了一个JSZIP的实例化对象。接下来我们就可以通过这个对象来进行一些操作了。

读取zip文件

通过JSZip,我们可以实现对zip文件的读取和解析。要实现这个功能,我们用到的API是JSZip.loadAsync(data [, options])。从该API的命名也可以看出,这是一个异步函数。其具体使用方法如下:

<template><div><input type="file" id="file" /><button @click="analyze">解析</button></div>
</template><script>
import JSZip from "jszip";
export default {methods: {analyze() {let file = document.getElementById("file").files[0];let jszip = new JSZip();jszip.loadAsync(file).then((zip) => {console.log(zip);})}}
}
</script>

在上面的代码中,我们先创建了一个file类型的input组件,用来上传zip文件。点击按钮触发analyze函数,先通过document.getElementById("file").files[0]获取到input组件中上传的文件,再调用JSZip的loadAsync函数。由于loadAsync是一个异步函数,因此我们在该函数的then方法中传入其回调函数。最终打印出来的就是读取的zip文件的内容了。
在这里插入图片描述
我们可以看到,在控制台中打印了从上传的zip文件中读取的数据,其中最为重要的就是files字段。其包含了该压缩包中所承载的所有文件信息。

读取压缩包中的文件

在上一步中,我们使用loadAsync成功读取了压缩文件的信息,接下来,我们可能会遇到某些业务需要我们读取压缩包内部某个文件的信息。这个时候要怎么办呢?JSZip还为我们提供了另一个API——JSZip.file。下面我将来演示一下该API的使用方法。
我们依旧以上面的代码为模板,在loadAsync的回调函数中做些修改,将压缩包中的scores.txt的内容都打印出来。修改后的代码如下:

<template><div><input type="file" id="file" /><button @click="analyze">解析</button></div>
</template><script>
import JSZip from "jszip";
export default {methods: {analyze() {let file = document.getElementById("file").files[0];let jszip = new JSZip();jszip.loadAsync(file).then((zip) => {if (Object.keys(zip.files).indexOf("scores.txt") !== -1) {jszip.file("scores.txt").async("string").then((content) => {console.log(content);});}})}}
}
</script>

在回调函数中,我们通过Object.keys将JSZip的files转换为由其键值组成的数组(其键值表示的是文件名),在判断该文件存在后,我们调用JSZip.file接口,传入的值为该文件的文件名。然后调用 async(“string”) 函数,async函数将会返回该文件contentPromise对象,该函数可以传入的参数有:

  • string:返回该文件内容的Promise对象
  • blob:返回该文件内容的二进制(BLOB)的Promise对象
  • base64:返回该文件经过base64编码后的内容的Promise对象
  • arraybuffer:返回该文件内容的二进制(ArrayBuffer)的Promise对象
  • uint8array:返回该文件内容的8位无符号整型数组的Promise对象(该参数也可写为nodebuffer

以上参数可以根据需要进行选择。在获取到Promise对象后,我们就可以使用then函数提取出该文件的content了。
当zip文件中存在树状结构时,如:

├── aaa.txt
├── bbb.txt
├── folder
│   └── test.txt
└──scores.txt

在上述的结构中,我们发现存在一个叫做“folder”的文件夹,其中含有一个叫做“test.txt”的文件。如果我们需要读取这个test.txt的时候,又该怎么做呢?很简单,我们只需要使用/来构造相对路径即可,比如:jszip.file("folder/test.txt")
当然,我们还可以换一种写法,这种写法需要引入一个新的API,这个API专门用来读取文件夹,它叫做folder
如果使用该API,上面的代码则可以改写成jszip.folder("folder").file("test.txt")

遍历压缩包内的所有文件(单层)

使用JSZip.forEach接口,可以实现遍历当前层次下的所有文件。比如我要遍历“parent”文件夹下的所有文件,我们可以采用如下写法:

let JSZip = require("jszip");
let jszip = new JSZip();
jszip.loadAsync(document.getElementById("file").files[0]).then((zip) => {jszip.folder("parent").forEach((relativePath, file) => {console.log(relativePath, file); // 打印文件的相对路径以及文件的详细内容})
})

小结

使用上述API基本可以实现SDUOJ项目所需要的对zip文件的操作,其他的API在本文中不再做过多赘述,如有需要可以查看JSZIP的官方文档,其介绍得还是比较清楚的。


http://chatgpt.dhexx.cn/article/7yZvjiSp.shtml

相关文章

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…

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;用…