上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

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

[复制链接]

189

主题

1474

帖子

763

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
763
发表于 2021-10-20 20:00:01 | 显示全部楼层 | 阅读模式

前言

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

如何使用

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

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

获取对象

在引入js文件后

创建一个JSZip实例

var zip=new JSZip();

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

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

创建一个文件
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实例对象中

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

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

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...}
  });
}

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

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文件

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

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

读取Zip文件

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

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

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不保证返回相同的文件

混的人。

发表回复

本版积分规则

快速回复 返回顶部 返回列表