李恒道 发表于 2021-10-20 20:00:01

[油猴脚本开发指南]JSZIP库压缩解压文件

# 前言

jszip还是一个非常优秀的库的,我们可以在前端实现文件的压缩,以及解压功能。

# 如何使用

JSZip的一个新建的实例代表一组文件,可以添加、删除、修改。

我们可以导入现有的zip文件,或生成一个新的

## 获取对象

在引入js文件后

创建一个JSZip实例

```javascript
var zip=new JSZip();
```

然后我们可以添加或更新文件以及文件夹

file函数以及folder函数处理后依然会返回zip实例,以供我们进行链式调用。

```javascript
创建一个文件
zip.file("hello.txt", "Hello[p my)6cxsw2q");
支持换行符
zip.file("hello.txt", "Hello World\n");
创建一个文件以及目录
zip.file("nested/hello.txt", "Hello World\n");
创建一个目录然后创建一个文件
zip.folder("nested").file("hello.txt", "Hello World\n");
```

使用folder函数后,返回的对象为创建目录的根,如果在此对象上进行添加文件的操作

则将他们放入了创建创建的子文件夹目录之中,这只是一个相对路径的对象,添加的文件

也同样会存在于我们的zip实例对象中

```javascript
var photoZip = zip.folder("photos");
// 相当于创建了photos/README
photoZip.file("README", "a folder with photos");
```

您可以使用file访问文件的内容

```javascript
zip.file("hello.txt").async("string").then(function (data) {
// data is "Hello World\n"
});

字符作为一个无符号八位整形的数组
if (JSZip.support.uint8array) {
zip.file("hello.txt").async("uint8array").then(function (data) {
    // data is Uint8Array { 0=72, 1=101, 2=108, more...}
});
}
```

您可以使用如下命令删除文件或文件夹

```javascript
zip.remove("photos/README");
zip.remove("photos");
// same as
zip.remove("photos"); // by removing the folder, you also remove its content.
```

# 生成一个zip文件

使用generateAsync(options),您可以生成一个zip文件

注意,不是一个真正的文件,他仅在内存中表示

```javascript
var promise = null;
if (JSZip.support.uint8array) {
promise = zip.generateAsync({type : "uint8array"});
} else {
promise = zip.generateAsync({type : "string"});
}
```

# 读取Zip文件

通过loadAsync(data)您可以加载一个zip文件

注意,必须使用二进制下载文件然后进行解压

```javascript
var new_zip = new JSZip();
// more files !
new_zip.loadAsync(content)
.then(function(zip) {
    // you now have every files contained in the loaded zip
    zip.file("hello.txt").async("string"); // a promise of "Hello World\n"
});
```

# JSZip的局限性

不支持加密zip,多卷zip等

可以加载zip64文件但不能较大

JSZip仅支持UTF8编码

输出和输入zip不保证返回相同的文件
页: [1]
查看完整版本: [油猴脚本开发指南]JSZIP库压缩解压文件