我正在尝试使用Node.js从现有文件夹创建zip文件,并保留结构。
我希望有一个简单的模块来允许这种事情:
archiver.create("../folder", function(zipFile){
console.log('et viola');
});
但我找不到任何类似的东西!
我一直在谷歌搜索,到目前为止我发现的最好的是zipstream,但据我所知,没有办法做我想要的。我真的不想调用命令行实用程序,因为应用程序必须是跨平台的。
非常感谢任何帮助。
感谢。
答案 0 :(得分:2)
它不是完全免代码的,但您可以将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 :(得分: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文件中过多嵌套。
答案 2 :(得分:-1)
使用Easy-zip,npm install easy-zip
,您可以:
var zip5 = new EasyZip();
zip5.zipFolder('../easy-zip',function(){
zip5.writeToFile('folderall.zip');
});