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



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

我希望有一个简单的模块可以实现这种功能:

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

但我找不到这样的东西!

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

如有任何帮助,我们将不胜感激。

谢谢。

它不是完全无代码的,但您可以将node原生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");
            });                    
        });
    });    
}

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

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

如果您正在压缩一个sibdirectory,并且不希望在zip文件中有过多的嵌套,那么-j标志会"丢弃"文件路径。

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

使用Easy zip,npm install easy-zip,您可以执行:

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

相关内容

  • 没有找到相关文章

最新更新