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 相关文章推荐
extjs 为某个事件设置拦截器
Jan 15 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
Jan 09 Javascript
jQuery预加载图片常用方法
Jun 15 Javascript
JS实现图片垂直居中显示小结
Dec 13 Javascript
jquery dataview数据视图插件使用方法
Dec 23 Javascript
js实现表格筛选功能
Jan 18 Javascript
webpack 模块热替换原理
Apr 09 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
Jul 01 Javascript
js中async函数结合promise的小案例浅析
Apr 14 Javascript
简单通过settimeout看javascript的运行机制
May 10 Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
Oct 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
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
javascript 避免闭包引发的问题
2009/03/17 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
vue实现拖拽效果
2019/12/23 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
Python translator使用实例
2008/09/06 Python
Python中将字典转换为列表的方法
2016/09/21 Python
python读取和保存视频文件
2018/04/16 Python
python web框架中实现原生分页
2019/09/08 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
素质拓展感言
2014/01/29 职场文书
通信研究生自荐信
2014/02/01 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
小学教师教育随笔
2015/08/14 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
Golang并发操作中常见的读写锁详析
2021/08/30 Golang