nodejs 中压缩/解压方案

转载 2015年06月15日 10:09:29

项目里要用到archive和unarchive整个已存在的folder,在找解决方案的时候尝试了一些当前比较流行的library,主要有adm-zip, JSZip, archiver等。

假设要压缩的文件结构如下图:enter image description here

一.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);

最后得到的组织结构如下图:enter image description here

Pros and cons:
1. 同时实现了压缩和解压,而且只要提供路径就可以对已存在的文件或文件夹进行操作,实现了很多接口,使用方便简单。
2. 本身存在bug,有的时候解压文件没法还原到本来的文件。Hope慢慢这些bug会fix好。

二. Use JSZip

这个库在使用的时候需要把文件一个个增加到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是硬伤啊...)

这些只是我昨天找的一些库,欢迎推荐其他库么么哒

zip压缩工具jszip--nodejs常用模块(8)

简单介绍 最近写个工具,需要将一些文件压缩到zip包里。使用nodejs调用机器上的zip命令也可以,但对机器就会有要求,需要安装zip命令。当npm上找了下,jszip和adm-zip,这两个...

NodeJS学习系列课程笔记(NodeJs zlib库文件解压缩的相关使用方法)

文件的压缩和解压,是一个很常见的功能,最近做项目用到这个功能点,于是拿出来分享一下。简单起见,我们看一下代码操作:文件压缩/** * Created by Richard on 7/14/16. ...

基于node的uglifyjs压缩JS

首先安装nodejs(windows下安装nodejs) 1.下载安装文件 下载地址:官网http://www.nodejs.org/download/ 2.安装文件 3...
  • ywj5200
  • ywj5200
  • 2016年12月29日 15:59
  • 1713

nodejs 对文件进行 压缩加密和解压缩解密

utils.js var fs = require('fs'); var zlib = require('zlib'); var crypto = require('crypto'); funct...

nodejs 压缩和解压

var zlib = require('zlib'); var async = require('async'); function gzip(text){ var buf = new Bu...

nodejs 压缩文件 archiver

如下代码实现 压缩a文件夹中的所有内容,生成a.zip 文件 cwd:需要压缩源文件的路径 src:需要压缩的文件 ** 是全部文件 dest 是解压后的层级,如果不设置会使用src的全部层级 ...
  • ISaiSai
  • ISaiSai
  • 2016年04月27日 16:45
  • 2071

nodejs下打包模块archiver详解

archiver是一个在nodejs中能跨平台实现打包功能的模块,可以打zip和tar包,是一个比较好用的三方模块。 使用前先安装archiver模块。 复制代码代码如下: ...
  • ctbinzi
  • ctbinzi
  • 2015年12月02日 15:13
  • 1204

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

css压缩工具clean-css -- nodejs常用模块(5)

模块介绍 说明文档 https://github.com/GoalSmashers/clean-css demo 这里只贴了代码,具体步骤参考《js,css压缩工具yuicompres...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nodejs 中压缩/解压方案
举报原因:
原因补充:

(最多只允许输入30个字)