2014-01-27 311 views
5

我現在使用zlib和fstream一起壓縮併發送到客戶端,現在我需要解壓縮一個存檔(可能包含子文件夾)到維護文件夾結構的文件夾中。我怎麼做?如何將Node.js中的.zip/.rar文件解壓縮到文件夾中

+0

你好我可以知道如何將整個文件夾壓縮成一個zip文件。我嘗試使用fstream.Reader({path:「E:\\ d data \\ electron \\ Applications \\ FirstApp \\ js \\ temp \\」,鍵入:「Directory」}) \t .pipe新的tar.Pack()) \t .pipe(zlib.Gzip()) \t .pipe(fstream.Writer({path:「C:\\ Users \\ Raina \\ AppData \\ Local \\ Temp」, file:'compressed_folder.tar.gz'}));但我得到一個錯誤。 –

回答

9

有很多節點模塊可以爲你做到這一點。其中之一是節點解壓縮。您可以像這樣簡單地將.zip文件提取到目錄。

fs.createReadStream('path/to/archive.zip').pipe(unzip.Extract({ path: 'output/path' }));

進一步閱讀:https://github.com/EvanOxfeld/node-unzip

+0

我可以使用zlib而不使用unzip嗎? – Raghavendra

+0

@Raghav我相信zlib是用於處理GZip而不是Zip。 – gpopoteur

+0

@gpopoteur嗨,我知道這篇文章是相當古老的,但它對我很有幫助。你能告訴我如何知道什麼時候fs.createReadStream('path/to/archive.zip')。pipe(unzip.Extract({path:'output/path'}));完成?完成後我想做點什麼:) –

0

的RAR是一個封閉的代碼的軟件。你能做到這一點的唯一方法 - 安裝命令行RAR(RAR,這是可以在大多數平臺上的RAR.EXE或Linux版本),並通過這種方式稱之爲:

var exec = require('child_process').exec; 

exec("rar.exe x file.rar", function (error) { 
    if (error) { 
    // error code here 
    } else { 
     // success code here 
    } 
}); 
1

您可以使用此令人讚歎的模塊http://node-machine.org/machinepack-zip

的解壓與目錄結構的zip文件內袋

var Zip = require('machinepack-zip'); 

//解壓縮指定的.zip文件和寫解壓縮的文件/目錄作爲指定的目標目錄的內容。

Zip.unzip({ 
    source: '/Users/mikermcneil/stuff.zip', 
    destination: '/Users/mikermcneil/my-stuff', 
}).exec(callbackSuccess, callbackFail); 

下載遠程文件並解壓您可以使用此代碼:

 var fs = require('fs'); 
    var unzip = require("unzip2"); 
    var tar = require('tar'); 
    var zlib = require('zlib'); 
    var path = require('path'); 
    var mkdirp = require('mkdirp'); // used to create directory tree 
    var request = require("request"); 
    var http = require('http'); 
    var zip = require("machinepack-zip"); 



    for (var i = 0; i < _diff.length; i++) { 
     request(constants.base_patch +"example.zip") 
      request = http.get({ host: 'localhost', 
            path: '/update/patchs/' + "example.zip", 
            port: 80, 
            headers: { 'accept-encoding': 'gzip,deflate' } }); 

      request.on('response', (response) => { 
       var output = fs.createWriteStream(__dirname + "/tmp/" +"example.zip"); 

        switch (response.headers['content-encoding']) { 
        // or, just use zlib.createUnzip() to handle both cases 
        case 'gzip': 
         response.pipe(zlib.createGunzip()).pipe(unzip.Extract({ path: __dirname })); 
         break; 
        case 'deflate': 

         response.pipe(zlib.createInflate()).pipe(unzip.Extract({ path: __dirname })); 
         break; 
        default: 
         response.pipe(output); 
         break; 
        } 
      }) 

      request.on('close', function(){ 
       zip.unzip({ 
        source: __dirname + "/tmp/" + "example.zip", 
        destination: __dirname, 
       }).exec({ 
        error: function (err){ 
        alert("error") 
        }, 

        success: function(){ 
        //delete temp folder content after finish uncompress 
        }, 
       }); 
      }) 
    } 

注:去掉unnecesary模塊。