2014-01-27 2 views
5

Я использую zlib вместе с fstream теперь для zipping и отправки клиенту. Теперь мне нужно разархивировать архив (который может содержать подпапки) в папку, поддерживающую структуру папок. Как мне это сделать?Как распаковать файл .zip/.rar в Node.js в папку

+0

Привет Могу ли я знать, как сжать всю папку в один ZIP-файл. Я пытаюсь использовать fstream.Reader ({path: "E: \\ d data \\ electronic \\ Applications \\ FirstApp \\ js \\ temp \\", type: "Directory"}) \t .pipe (новый tar.Pack()) \t .pipe (zlib.Gzip()) \t .pipe (fstream.Writer ({path: "C: \\ Users \\ Raina \\ AppData \\ Local \\ Temp", файл: 'compress_folder.tar.gz'})); но я получаю сообщение об ошибке. –

ответ

9

Существует множество модулей узлов, которые могут сделать это за вас. Один из них - unzip узла. Вы можете извлечь .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 ('путь/to/archive.zip'). Pipe (unzip.Extract ({path: 'output/path'})); отделки? Я хочу что-то сделать после его завершения :) –

0

Рар представляет собой программное обеспечение с закрытым кодом. Единственный способ, которым Вы можете сделать это - установить командную строку RAR (rar.exe или Линукс версию RAR, который доступен на большинстве платформ) и вызвать его с помощью этого:

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

для распаковки архива со структурой каталогов внутри почтового

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 модули.

Смежные вопросы