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 兼容FF的onmouseenter和onmouseleave的代码
Jul 19 Javascript
jQuery UI AutoComplete 自动完成使用小记
Aug 21 Javascript
jquery遍历checkbox的注意事项说明
Feb 21 Javascript
详解JavaScript对象序列化
Jan 19 Javascript
jQuery基于muipicker实现仿ios时间选择
Feb 22 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 Javascript
Vue.js中组件中的slot实例详解
Jul 17 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
Jan 23 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
Jul 03 Javascript
countUp.js实现数字动态变化效果
Oct 17 Javascript
jquery+css3实现的经典弹出层效果示例
May 16 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
PHP 地址栏信息的获取代码
2009/01/07 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
php和html的区别点详细总结
2019/09/24 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
js电话号码验证方法
2015/09/28 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
python控制台中实现进度条功能
2015/11/10 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python pymongo模块用法示例
2018/03/31 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
Python Cookie 读取和保存方法
2018/12/28 Python
Python3模拟登录操作实例分析
2019/03/12 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
Python进行特征提取的示例代码
2020/10/15 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
药学专业个人的自我评价
2013/12/31 职场文书
人事专员的职责
2014/02/26 职场文书
五一口号
2014/06/19 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
死亡证明书样本说明
2014/10/18 职场文书
2014年残联工作总结
2014/11/21 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
企业2014年度工作总结
2014/12/10 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
java设计模式--七大原则详解
2021/07/21 Java/Android