使用JSZip实现压缩文件与图片

简介: 使用JSZip实现压缩文件与图片

JSZip简介

JSZip是一个用于创建、读取和编辑.zip文件的javascript库,有一个可爱而简单的API。JSZip支持Nodejs和浏览器端的安装使用。具体方法如下:

npm install jszipnp
m install file-saver

浏览器端解压zip文件

       后端Nodejs将zip文件以二进制形式存储到数据库中。当前端需要该zip文件时,后端将zip文件以二进制形式传输到前端,前端再解压还原。

使用JSZip压缩文件

import JSZip from 'jszip';
import FileSaver from 'file-saver';
var zip = new JSZip();
//创建hello.txt文件,文件内容为Hello World
zip.file("hello.txt", "Hello World\n");
//创建一个nested文件夹,文件里里创建一个hello.txt文件,文件内容为Hello World
zip.folder("nested").file("hello.txt", "Hello World\n");
zip.generateAsync({type:"blob"}).then(function(content) {
// 使用file-saver保存下载zip文件
FileSaver.saveAs(content, `压缩包名.zip`);
});

通过.remove(name)删除文件或文件夹:

    zip.remove("photos"); //通过删除文件夹,也删除其内容。

    浏览器端解压Zip文件

    import JSZip from 'jszip'
    let new_zip = new JSZip();
    new_zip.loadAsync(content).then(function(zip) {
    new_zip.file("hello.txt").async("string");
    });

    案例:导出一个zip文件,包含图片文件和.json文件

    /**
      *  @param dataList ['base64数据','base64数据']
      */
    function exportJSZipFileSaverEvent (dataList: any) {
    var zip = new JSZip();
    var img = zip.folder("images");
    let myNotesName = 'zip名称';
    for (let i = 0; i < dataList.length; i++) {
      //过滤base64格式
      let image = dataList[i].replace(/^data:image\/(png|jpg|jpeg);base64,/, "");
      let imageNames = `${myNotesName}${getTime()}(${i + 1}).png`;
      img?.file(imageNames, image, {base64: true});
      // 导出json
      let jsonNames = `${myNotesName}${getTime()}(${i + 1}).json`;
      zip.file(jsonNames, 'json文本数据');
    }
    // 下载
    zip.generateAsync({type: "blob"}).then(function (content) {
        FileSaver.saveAs(content, `${myNotesName}${getTime()}.zip`);
    });
    }
    function getTime () {
         let data = new Date();
         return data.getFullYear() + "-" + (data.getMonth() + 1) + "-" + data.getDate();
    }

    JSZip API地址:

    https://stuk.github.io/jszip/

    https://heltschl.org/_js/jszip/

    相关文章
    |
    JavaScript 前端开发 算法
    设计一个简单的JavaScript版“俄罗斯方块”游戏的基本逻辑流程。
    ```md 设计JavaScript版俄罗斯方块游戏涉及初始化环境、创建游戏容器、管理变量、加载音效。游戏循环中生成方块、键盘控制移动与旋转、碰撞锁定、行消除及分数更新。当游戏区域填满时结束游戏,显示结束画面。还包括暂停、重置等辅助功能。伪代码示例展示了核心逻辑,实际实现需考虑更多细节和用户体验增强。 ```
    816 3
    |
    10月前
    |
    人工智能 Rust 自然语言处理
    Qoder NEXT 测评:不止是代码补全,而是“会思考的编程搭档”
    本次测评聚焦三大核心问题: 能否超越传统 FIM,支持真实开发中的结构化编辑? 编辑建议是否精准、符合开发者意图? 是否具备持续进化能力,越用越好?
    |
    Linux 数据安全/隐私保护
    Linux基础命令---put上传ftp文件
    put 使用lftp登录ftp服务器之后,可以使用put指令将文件上传到服务器。 1、语法 put [-E] [-a] [-c] [-O base] lfile [-o rfile] 2、选项列表 -o 指定输出文件的名字,不指定则使用原来的名字 -...
    9107 0
    |
    Web App开发 数据安全/隐私保护 开发者
    Firefox Add-ons 插件上架发布全流程指南
    本文详细介绍了如何将浏览器插件上架到 Firefox Add-ons,涵盖从注册开发者账号、打包插件、提交审核到最终发布的全流程。与 Chrome Web Store 类似,但 Firefox 的流程更为简化,注册免费且对权限审查相对宽松。文章还对比了两者的关键差异,帮助读者更快上手 Firefox 插件的发布。如果你已经熟悉 Chrome 的上架流程,这篇文章会让你更轻松地在 Firefox 平台上发布插件,触达更多用户。
    1076 0
    |
    JavaScript
    Vue父组件调用子组件的方法并传参的两种方式(用$refs.refName.functionName、window.function)
    Vue父组件调用子组件的方法并传参的两种方式(用$refs.refName.functionName、window.function)
    Vue父组件调用子组件的方法并传参的两种方式(用$refs.refName.functionName、window.function)
    |
    存储 缓存 安全
    从原理到实践:掌握DPDK内存池技术(下)
    从原理到实践:掌握DPDK内存池技术
    |
    存储 安全 搜索推荐
    Cookie和Session的区别,99%的程序员都不知道的细节!
    大家好,我是小米,在Web开发中,Cookie和Session是两种重要的状态管理工具。它们有着不同的存储位置、安全性和应用场景。本篇文章将详细解析它们的区别和应用,让你在开发过程中能够更加游刃有余。让我们一起深入了解吧!
    805 1
    |
    机器学习/深度学习 人工智能 自然语言处理
    秒级响应 + 99.9%准确率:法律行业文本比对技术解析
    本工具基于先进AI技术,采用自然语言处理和语义匹配算法,支持PDF、Word等格式,实现法律文本的智能化比对。具备高精度语义匹配、多格式兼容、高性能架构及智能化标注与可视化等特点,有效解决文本复杂性和法规更新难题,提升法律行业工作效率。
    1187 9
    |
    数据采集 缓存 JavaScript
    ​DrissionPage,Python浏览器自动化又一神器~
    ​DrissionPage,Python浏览器自动化又一神器~
    1094 2