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 写类方式之七
Jul 05 Javascript
QUnit jQuery的TDD框架
Nov 04 Javascript
js获取IP和PcName(IE)在vs中可用
Aug 02 Javascript
原生JS实现美图瀑布流布局赏析
Sep 07 Javascript
javascript中eval和with用法实例总结
Nov 30 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 Javascript
js使用html2canvas实现屏幕截取的示例代码
Aug 28 Javascript
Layer弹出层动态获取数据的方法
Aug 20 Javascript
浅谈Vue.js组件(二)
Apr 09 Javascript
多个vue子路由文件自动化合并的方法
Sep 03 Javascript
微信小程序国际化探索实现(附源码地址)
May 20 Javascript
详解Vue.js 响应接口
Jul 04 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构造函数实例讲解
2013/11/13 PHP
php生成短网址示例
2014/05/05 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
用ADODB.Stream转换
2007/01/22 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
详解vue axios二次封装
2018/07/22 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
Python求算数平方根和约数的方法汇总
2016/03/09 Python
详解python开发环境搭建
2016/12/16 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
基于Python测试程序是否有错误
2020/05/16 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
新学期红领巾广播稿
2014/01/14 职场文书
结婚仪式主持词
2015/06/29 职场文书