Создание zip-архива из папки и сохранение структуры с помощью Node.js - PullRequest
5 голосов
/ 23 марта 2012

Я пытаюсь использовать Node.js для создания zip-файла из существующей папки и сохранения структуры.

Я надеялся, что найдется простой модуль для такого рода вещей:

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

но я не могу найти ничего подобного!

Я гуглил, и лучшее, что я нашел на данный момент, это zipstream, но, насколько я могу судить, нет способа сделать то, что я хочу. Я действительно не хочу заходить в утилиты командной строки, поскольку приложение должно быть кроссплатформенным.

Любая помощь будет принята с благодарностью.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

Он не полностью свободен от кода, но вы можете использовать node-native-zip в сочетании с folder.js .Использование:

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");
            });                    
        });
    });    
}
1 голос
/ 15 августа 2012

Это можно сделать еще проще, используя встроенную функцию execfile узла.Он порождает процесс и выполняет команду zip через ОС изначально.Все просто работает.

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

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

Флаг -j 'junk' путь к файлу, если вы архивируете sibdirectory и не хотите чрезмерного вложения в zip-файл. некоторая документация по execfile .Вот справочная страница для zip .

0 голосов
/ 21 марта 2014

Используя Easy-zip , npm install easy-zip, вы можете сделать:

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