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 相关文章推荐
IE6、IE7中获取Button元素的值的bug说明
Aug 28 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
Mar 14 Javascript
uploadify 3.0 详细使用说明
Jun 18 Javascript
jquery 滚动条事件简单实例
Jul 12 Javascript
js中的前绑定和后绑定详解
Aug 01 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
Jul 27 Javascript
jquery.flot.js简单绘制折线图用法示例
Mar 13 Javascript
探索webpack模块及webpack3新特性
Sep 18 Javascript
Node.js引入UIBootstrap的方法示例
May 11 Javascript
Angularjs中date过滤器失效的问题及解决方法
Jul 06 Javascript
浅谈JS和jQuery的区别
Mar 27 jQuery
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
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
11个PHP 分页脚本推荐
2011/08/15 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
Django自带日志 settings.py文件配置方法
2019/08/30 Python
python多线程使用方法实例详解
2019/12/30 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
医院竞聘演讲稿
2014/05/16 职场文书
滞留工资返还协议书
2014/10/19 职场文书
2015年班干部工作总结
2015/04/29 职场文书
详解Redis实现限流的三种方式
2021/04/27 Redis
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL