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