GitHub上一些实用的JavaScript的文件压缩解压缩库推荐


Posted in Javascript onMarch 13, 2016

项目里要用到archive和unarchive整个已存在的folder,在找解决方案的时候尝试了一些当前比较流行的library,主要有adm-zip, JSZip, archiver等。

一.Use adm-zip
adm-zip支持archive和unarchive一个或多个文件或者整个文件夹的功能,使用非常的简单方便。

var adm_zip = require('adm-zip');

  //creating archives
  var zip = new adm_zip(); 
  zip.addLocalFolder('archiver'); 
  zip.writeZip('adm/adm-archive.zip'); 

  //extracting archives 
  var unzip = new adm_zip('adm/adm-archive.zip'); 
  unzip.extractAllTo("adm/adm-unarchive/", /*overwrite*/true);

Pros and cons:
1. 同时实现了压缩和解压,而且只要提供路径就可以对已存在的文件或文件夹进行操作,实现了很多接口,使用方便简单。
2. 本身存在bug,有的时候解压文件没法还原到本来的文件。Hope慢慢这些bug会fix好。

二. UseJSZip
这个库在使用的时候需要把文件一个个增加到zip对象中,而且需要把内容也手动添加,再使用写文件操作把内存中的zip对象转成物理存储。所以如果是对于一整个文件夹来说,就很麻烦,需要遍历文件夹。

var JSZip = require("jszip");
var fs = require("fs");

var zip = new JSZip();

var file_content = fs.readFileSync('archive/a.txt');


zip.file("a.txt",file_content);

var data = fs.readFileSync("archive/img/pic.jpeg");
zip.file("img/pic.jpeg", data, {base64: true});

var zipfolder = zip.generate({type:"nodebuffer"});

fs.writeFile("jszip.zip", zipfolder, function(err) {
  if (err) throw err;
});

JSZip里面也有个folder方法,但它只是用来切换zip对象内部的虚拟路径,比如zip.folder("img").file('a.txt')就是在zip中添加一个img子目录,在下面创建a.txt,效果等同于zip.file("img/a.txt")。这里还需要注意的是,文件的内容都需要手动添加,如果仅仅是zip.file("a.txt");只是在zip对象中创建了内容为空的txt文件,而且它只是存在于内存中,需要写文件操作后才会真正存到磁盘。

Pros and cons:
1.对于一些实时接受到的数据转成zip的比较适用。 2.对于已存在的文件夹操作不便,需要一个个把内容添加到zip对象,再转成文件。
3.很多编码需要注意。
4.只有压缩功能。

三. Use archiver and unzip
这个组合是最后我使用的,比较靠谱,使用也比较简单,其中archiver很强大,支持zip格式tar格式,只需要提供路径就可以压缩已存在的文件夹。 压缩:

var fs = require('fs');
var archiver = require('archiver');

var output = fs.createWriteStream('archiver-unzip.zip');
var archive = archiver('zip');

archive.on('error', function(err){
  throw err;
});

archive.pipe(output);
archive.bulk([
  { src: ['archiver/**']}
]);
archive.finalize();

解压:

var fs = require("fs");
var unzip = require("unzip");

fs.createReadStream('archiver-unzip.zip').pipe(unzip.Extract({ path: 'unarchive' }));

Pros and cons:
1. 久经试用,bug较少。
2.使用方便,不需要遍历文件夹。
3. 均只提供压缩或者解压,没有两个功能都实现的。(所以adm-zip其实很好用,但bug是硬伤啊...)

这些只是我昨天找的一些库,欢迎推荐其他库么么哒

Javascript 相关文章推荐
javascript hashtable实现代码
Oct 13 Javascript
js实现幻灯片播放图片示例代码
Nov 07 Javascript
js正则表达exec与match的区别说明
Jan 29 Javascript
JQuery中clone方法复制节点
May 18 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
基于Javascript实现二级联动菜单效果
Mar 04 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
Jun 12 Javascript
走进javascript——不起眼的基础,值和分号
Feb 24 Javascript
javascript实现文本框标签验证的实例代码
Oct 14 Javascript
Vue+Element实现动态生成新表单并添加验证功能
May 23 Javascript
使用JS location实现搜索框历史记录功能
Dec 23 Javascript
Javascript数组Array基础介绍
Mar 13 #Javascript
深入探究JavaScript中for循环的效率问题及相关优化
Mar 13 #Javascript
简单谈谈json跨域
Mar 13 #Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
Mar 13 #Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
Mar 12 #Javascript
JavaScript中循环遍历Array与Map的方法小结
Mar 12 #Javascript
Node.js的Express框架使用上手指南
Mar 12 #Javascript
You might like
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
Using the TextRange Object
2006/10/14 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
python使用Image处理图片常用技巧分析
2015/06/01 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
python中子类调用父类函数的方法示例
2017/08/18 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
TensorFlow损失函数专题详解
2018/04/26 Python
python dict乱码如何解决
2020/06/07 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
银行优秀员工事迹
2014/02/06 职场文书
党建目标管理责任书
2014/07/25 职场文书
董存瑞观后感
2015/06/11 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书