一、压缩

  1、zlib

  我们先来说说nodejs自带的压缩解压缩模块"zlib",先来看一段官网提供的示例代码

 
  
  1. var zlib = require('zlib'); 
  2. var gzip = zlib.createGzip(); 
  3. var fs = require('fs'); 
  4. var inp = fs.createReadStream('input.txt'); 
  5. var out = fs.createWriteStream('input.txt.gz'); 
  6. inp.pipe(gzip).pipe(out); 

  按示例试验,成功了,可是为什么我只能把一个文件打包啊,坑爹啊!!!

  但是,这个模块的说明文档上还有着好多转码的东西,看起来更像是用来网页传输加密解密的东西!恕我愚昧,感兴趣的人自己去研究吧,今天我要找的压缩、解压缩!

  2、node-native-zip

  我们同样来看一段它git上的示例代码

 
  
  1. var fs = require("fs"); 
  2. var zip = require("node-native-zip"); 
  3.  
  4. var archive = new zip(); 
  5.  
  6. archive.addFiles([  
  7.     { name: "moehah.txt", path: "./test/moehah.txt" }, 
  8.     { name: "p_w_picpaths/suz.jpg", path: "./test/p_w_picpaths.jpg" } 
  9. ], function (err) { 
  10.     if (err) return console.log("err while adding files", err); 
  11.  
  12.     var buff = archive.toBuffer(); 
  13.  
  14.     fs.writeFile("./test2.zip", buff, function () { 
  15.         console.log("Finished"); 
  16.     }); 
  17. }); 

  我们可以清晰地看出它可以把指定的文件添加到压缩包指定的路径下,

  可是,可是为神马生成的zip文件不是真正的zip文件啊,搞的我一直以为是解压缩模块的问题(用此模块生成的zip包用unzip模块解压报错啊,用WINRAR生成的zip文件解压的好好的啊)。

二、解压缩

  unzip模块

  我们同样来看一下调用代码:

 
  
  1. var fs = require('fs'),   
  2.     unzip = require('unzip');  
  3. fs.createReadStream('path/to/archive.zip').pipe(unzip.Extract({ path: 'output/path' }));  

  指定两个路径即可,一个zip包的路径,一个解压缩到的地址路径。

  问题又来了,为神马没有回调函数,解压报错怎麽办啊,混蛋!

  好吧,其实它有报错捕获方法,经查看源码,发现如下方法:

 
  
  1. var extract = unzip.Extract({ path:  './public/ebook/' });  
  2. extract.on('error'function(err) {  
  3.     console.log("error++++++++++++++++++++++");  
  4.     console.log(err);  
  5.     //解压异常处理  
  6. });  
  7. extract.on('finish'function() {  
  8.     console.log("解压完成!!");  
  9.     //解压完成处理  
  10. });  
  11. fs.createReadStream(target_path).pipe(extract);  

三、说点什么

  nodejs的压缩和解压的模块还有很多,只是很好用的还没有发现,多半是文档不全,无从下手的,学无止境啊,望发现其他node模块实现压缩解压功能的人共同交流学习赐教!