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 相关文章推荐
33个优秀的 jQuery 图片展示插件分享
Mar 14 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
Jan 07 Javascript
js 控制图片大小核心讲解
Oct 09 Javascript
javascript中caller和callee详解
Aug 10 Javascript
详解JavaScript语言的基本语法要求
Nov 20 Javascript
javascript实现查找数组中最大值方法汇总
Feb 13 Javascript
JS随机洗牌算法之数组随机排序
Mar 23 Javascript
Bootstrap布局方式详解
May 27 Javascript
完美实现js选项卡切换效果(一)
Mar 08 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
Oct 09 jQuery
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
Sep 06 Javascript
详解如何在Vue项目中发送jsonp请求
Oct 25 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 开发环境配置(Zend Studio)
2010/04/28 PHP
PHP判断变量是否为0的方法
2014/02/08 PHP
php socket通信简单实现
2016/11/18 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
Python中集合类型(set)学习小结
2015/01/28 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
python sleep和wait对比总结
2021/02/03 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
金山毒霸系列的笔试题
2013/04/13 面试题
给老师的道歉信
2014/01/11 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
防汛通知
2015/04/25 职场文书
幼儿园六一主持词
2015/06/30 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL