基于JSZip的前端文件压缩
1. 简介:
这段时间,项目需要做一个这样的功能:客户端在上传文件的时候(具体文件类型),需要对文件进行压缩再上传以节省带宽和服务器端资源,完成这个功能,我们选择了GitHub上的JSZip,它是一个客户端插件,可以提供客户端压缩功能,作者给出了API,但是实际使用过程中还是有很多问题,下面是实际过程中遇到的各类问题,直至最终完成整个文件压缩再上传至后台。
2.项目相关组件与环境:
前端node.js
+ webpack
作前后台分离,后端java
3. 具体实现
主要js代码:
1 | var JSZip = require('jszip'); |
这部分代码就是异步压缩的核心,以及如何调用的下面的异步压缩算法,上面需要Async与await关键字缺一不可,一开始也尝试过使用同步压缩的方式,但是会出现压缩还没有全部完成,就已经开始提交文件的现象,特别感谢lrh3321的指导,才完整的实现了这个功能。
因为异步压缩的时候我们上传的文件的数量不定,所以上面需要使用await关键字来修饰压缩过程。而下面的压缩过程的实现,最终返回一个promise对象,当压缩过程已完成后,完整的生成的文件存于其中。
1 | /** |
这里的demo请查看JSZip给的例子
1 | /** |
http读取图片的时候会已base64编码形式对到服务器,如果不进行重新编码,则无法在图片查看器中查看图片
1 | function convertBase64UrlToBlob(urlData) { |