2012-03-23 9 views
5

Próbuję użyć Node.js do utworzenia pliku zip z istniejącego folderu i zachowania struktury.Tworzenie archiwum zip z folderu i zachowywanie struktury za pomocą Node.js

Miałem nadzieję, że będzie prosty moduł, aby umożliwić tego typu rzeczy:

archiver.create("../folder", function(zipFile){ 
    console.log('et viola'); 
}); 

ale nie mogę znaleźć nic w tym rodzaju!

Przeszukujełem, a najlepsze, jakie udało mi się znaleźć, to zipstream, ale z tego co wiem, nie ma sposobu, by zrobić to, co chcę. Naprawdę nie chcę wywoływać programów narzędziowych, ponieważ aplikacja musi być platformą.

Każda pomoc zostanie bardzo doceniona.

Dzięki.

Odpowiedz

2

To nie jest całkowicie bez kodu, ale można użyć node-native-zip w połączeniu z folder.js. Użycie:

function zipUpAFolder (dir, callback) { 
    var archive = new zip(); 

    // map all files in the approot thru this function 
    folder.mapAllFiles(dir, function (path, stats, callback) { 
     // prepare for the .addFiles function 
     callback({ 
      name: path.replace(dir, "").substr(1), 
      path: path 
     }); 
    }, function (err, data) { 
     if (err) return callback(err); 

     // add the files to the zip 
     archive.addFiles(data, function (err) { 
      if (err) return callback(err); 

      // write the zip file 
      fs.writeFile(dir + ".zip", archive.toBuffer(), function (err) { 
       if (err) return callback(err); 

       callback(null, dir + ".zip"); 
      });      
     }); 
    });  
} 
+0

Dzięki bardzo! Zip został utworzony, ale niestety jest uszkodzony i wydaje się pusty. Będę się z nim bawił i spróbuję zobaczyć, na czym polega problem. – user1257359

+0

W rzeczywistości wygląda na to, że jest * nieznacznie * uszkodzony;) ​​ Kiedy próbuję eksplorować utworzony zip, wydaje się on pusty, ale kiedy go rozpakuję, zawartość wygląda dobrze. Dzięki za wspaniałą, szybką odpowiedź! – user1257359

+0

Działa jak urok! – Tim

1

Można to zrobić jeszcze prostiej za pomocą wbudowanej funkcji execfile węzła. Tworzy on proces i wykonuje polecenie zip przez os, natywnie. Wszystko po prostu działa.

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

execFile('zip', ['-r', '-j', zipName, pathToFolder], function(err, stdout) { 
     console.log(err); 
     logZipFile(localPath); 
    }); 

-J flaga „dżonki” ścieżkę do pliku, jeśli skompresowanie się sibdirectory, i nie chcą nadmiernego zagnieżdżanie w pliku zip.

Oto some documentation on execfile. Oto a man page for zip.

+0

Operacja wyraźnie powiedziała, że ​​chce mieć natywną i krzyżową platformę, a nie wywoływać linii poleceń. – JohnC

-1

Korzystanie Easy-zip, npm install easy-zip, można zrobić:

var zip5 = new EasyZip(); 
zip5.zipFolder('../easy-zip',function(){ 
    zip5.writeToFile('folderall.zip'); 
}); 
+1

Nie polecam używania tego z powodu [tego problemu] (https://github.com/owenchong/easy-zip/issues/2). – rax

+0

Używam ostatnio 'easy-zip' i nie natknąłem się na problem z podświetleniem @rax. – developius

Powiązane problemy