从文件夹创建zip存档并使用Node.js保留结构

时间:2012-03-23 15:15:32

标签: javascript node.js zipstream

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

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

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

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

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

非常感谢任何帮助。

感谢。

3 个答案:

答案 0 :(得分: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");
            });                    
        });
    });    
}

答案 1 :(得分:1)

使用node的内置execfile函数可以更简单地完成此操作。它产生一个进程,并通过os本机执行zip命令。一切正常。

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

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

-j标志'junks'文件路径,如果你正在压缩一个sibdirectory,并且不希望在zip文件中过多嵌套。

这是some documentation on execfile。 这是a man page for zip

答案 2 :(得分:-1)

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

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