在node.js中生成一个受密码保护的ZIP文件

我需要在node.js中创build一个由密码保护的ZIP文件。

我正在使用“node-zip”模块,但不幸的是不支持密码保护:

var zip = new require('node-zip')(); zip.file('test.file', 'hello there'); var data = zip.generate({base64:false,compression:'DEFLATE'}); 

寻找其他节点模块来创buildZIP文件,我还没有发现任何支持密码保护。

如果你在linux上工作,那么你可以在zip(大多数linux发行版中的命令行工具)的帮助下做到这一点。 只需在您的应用程序中包含以下内容

 spawn = require('child_process').spawn; zip = spawn('zip',['-P', 'password' , 'archive.zip', 'complete path to archive file']); zip .on('exit', function(code) { ...// Do something with zipfile archive.zip ...// which will be in same location as file/folder given }); 

如果要压缩文件夹,只需在文件夹path而不是文件path之前添加另一个参数“-r”即可。

请记住,从主进程生成单独的线程,所以它是非阻塞的。 有关child_process更多信息,请看http://nodejs.org/api/child_process.html

我使用的解决scheme(我不是一个更好的方法)是:

 var contenido1 = 'contenido super secreto'; var contenido2 = 'otro contenido'; var password = 'pass'; var nombreFichero = 'fichero' var nodezip = new require('node-zip')(); var fs = require("fs"); nodezip.file('test1.txt', contenido1); nodezip.file('test2.txt', contenido2); var data = nodezip.generate({base64:false,compression:'DEFLATE'}); fs.writeFile(nombreFichero + '.zip', data, 'binary'); var exec = require('child_process').exec, child; child = exec('unzip ' + nombreFichero + '.zip -d ' + nombreFichero + ' && zip -junk-paths --password ' + password + ' ' + nombreFichero + '-p.zip ' + nombreFichero + '/*' + ' && rm -rf ' + nombreFichero + ' && rm -f ' + nombreFichero + '.zip', function (error, stdout, stderr) { console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }); 

它会生成一个临时的zip文件(不带密码),然后用几个命令,上传zip,用密码和删除临时文件。