6

我正在尝试使用 Node.js 从现有文件夹创建一个 zip 文件,并保留结构。

我希望有一个简单的模块来允许这种事情:

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

但我找不到任何类似的东西!

我一直在谷歌搜索,到目前为止我发现的最好的是 zipstream,但据我所知,没有办法做我想做的事。我真的不想调用命令行实用程序,因为该应用程序必须是跨平台的。

任何帮助将不胜感激。

谢谢。

4

3 回答 3

2

它并非完全免费,但您可以将node-native-zipfolder.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");
            });                    
        });
    });    
}
于 2012-03-23T15:23:09.340 回答
1

这可以使用节点的内置 execfile 函数更简单地完成。它产生一个进程并通过操作系统本地执行 zip 命令。一切正常。

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

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

-j 标志“垃圾”文件路径,如果您正在压缩 sib 目录,并且不希望在 zip 文件中过度嵌套。

这是有关 execfile 的一些文档。这是zip 的手册页

于 2012-08-15T17:33:58.890 回答
0

使用Easy-zipnpm install easy-zip您可以:

var zip5 = new EasyZip();
zip5.zipFolder('../easy-zip',function(){
    zip5.writeToFile('folderall.zip');
});
于 2014-03-21T12:08:58.837 回答