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

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

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    636

    主题

    5188

    回帖

    6070

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6070

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

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

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。

    发表回复

    本版积分规则

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