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 相关文章推荐
js 绑定带参数的事件以及手动触发事件
Apr 27 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
Sep 21 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
Aug 12 Javascript
使用Sticker.js实现贴纸效果
Jan 28 Javascript
js动态创建及移除div的方法
Jun 03 Javascript
第十篇BootStrap轮播插件使用详解
Jun 21 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
js实现图片懒加载效果
Jul 17 Javascript
Angular模板表单校验方法详解
Aug 11 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 Javascript
Vue $emit()不能触发父组件方法的原因及解决
Jul 28 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
在线增减.htpasswd内的用户
2006/10/09 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
javascript 回调函数详解
2014/11/11 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
从vue源码看props的用法
2019/01/09 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
Python自动扫雷实现方法
2015/07/25 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
体育教育专业自荐信范文
2013/12/20 职场文书
平安建设实施方案
2014/03/19 职场文书
淘宝活动总结范文
2014/06/26 职场文书
2014年质检工作总结
2014/11/26 职场文书
个人原因辞职信模板
2015/05/13 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
详解Python牛顿插值法
2021/05/11 Python
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技