我需要在node.js中创建一个受密码保护的ZIP文件。
我正在使用“node-zip”模块,遗憾的是它不支持密码保护:
var zip = new require('node-zip')();
zip.file('test.file', 'hello there');
var data = zip.generate({base64:false,compression:'DEFLATE'});
查看其他节点模块以创建ZIP文件,我还没有找到任何支持密码保护。
答案 0 :(得分:11)
如果你在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
});
如果你想压缩文件夹,只需在文件夹路径而不是文件路径之前放入另一个参数'-r'。
请记住,这会从主进程生成单独的线程,因此它是非阻塞的。有关child_process
的更多信息,请查看此处http://nodejs.org/api/child_process.html
答案 1 :(得分:6)
对于那些像我一样在这里结束的人,我在节点中尝试了几个包但最终使用了这个包:https://www.npmjs.com/package/minizip-asm.js
它支持密码(使用AES),并且非常易于使用。我很惊讶它没有那么多的下载,因为它是我发现支持密码的唯一一个。
答案 2 :(得分:2)
我遇到了同样的问题,并且找不到要执行此操作的软件包,因此我自己编写了一个软件包,作为archiver软件包的插件。纯JS,无需外部zip软件。
这里是-https://www.npmjs.com/package/archiver-zip-encrypted。 同时支持传统的Zip 2.0加密和WinZip的AES-256加密。
答案 3 :(得分:0)
我正在使用的解决方案(我没有更好的方法):
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文件(没有密码),然后使用几个命令,upzip,zip with password和删除临时文件。