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 相关文章推荐
jQuery第三课 修改元素属性及内容的代码
Mar 14 Javascript
js 控制页面跳转的5种方法
Sep 09 Javascript
浅析Node.js 中 Stream API 的使用
Oct 23 Javascript
jquery获取复选框checkbox的值实现方法
May 30 Javascript
让你一句话理解闭包(简单易懂)
Jun 03 Javascript
AngularJs  Using $location详解及示例代码
Sep 02 Javascript
详解JavaScript中this的指向问题
Jan 20 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
Aug 10 Javascript
浅谈vue-cli 3.0.x 初体验
Apr 11 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
Sep 15 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
Nov 14 Javascript
VueCli生产环境打包部署跨域失败的解决
Nov 13 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
10个实用的PHP代码片段
2011/09/02 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
XENON基于JSON变种
2010/07/27 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
Python语言异常处理测试过程解析
2020/01/08 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
python脚本第一行如何写
2020/08/30 Python
Python函数调用追踪实现代码
2020/11/27 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
轻化专业学生实习自我鉴定
2013/09/20 职场文书
廉政教育心得体会
2014/01/01 职场文书
食堂个人先进事迹
2014/01/22 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
庆元旦演讲稿
2014/09/15 职场文书
排球赛新闻稿
2015/07/17 职场文书
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers