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预加载图片、css、js的方法示例介绍
Oct 14 Javascript
Jquery操作radio的简单实例
Jan 06 Javascript
关于javascript模块加载技术的一些思考
Nov 28 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
May 21 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
Bootstrap Table使用方法详解
Aug 01 Javascript
Angular模版驱动表单的使用总结
May 05 Javascript
vue.js通过路由实现经典的三栏布局实例代码
Jul 08 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
Jul 09 Javascript
小程序云开发获取不到数据库记录的解决方法
May 18 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
Sep 03 Javascript
jQuery 筛选器简单操作示例
Oct 02 jQuery
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
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
js 深拷贝函数
2008/12/04 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
初步解析Python下的多进程编程
2015/04/28 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
使用C++扩展Python的功能详解
2018/01/12 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
Django csrf 验证问题的实现
2018/10/09 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
金山毒霸系列的笔试题
2013/04/13 面试题
小学音乐教学反思
2014/02/05 职场文书
企业负责人任命书
2014/06/05 职场文书
大一新生检讨书
2014/10/29 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
2015年市场部工作总结
2015/04/30 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
SQL SERVER触发器详解
2022/02/24 SQL Server
利用Java连接Hadoop进行编程
2022/06/28 Java/Android