14

我需要在 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 文件,我还没有找到任何支持密码保护的。

4

4 回答 4

16

如果您在 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

于 2013-02-12T11:05:07.817 回答
13

对于像我一样在这里结束的任何人,我在节点中尝试了几个包,但最终使用了这个:https ://www.npmjs.com/package/minizip-asm.js

它支持密码(使用 AES)并且非常易于使用。我很惊讶它没有那么多下载,因为它是我发现的唯一一个支持密码的。

于 2017-12-14T20:02:20.717 回答
8

我有同样的问题,找不到包来做,所以我自己写了一个,作为归档包的插件。纯 JS,无需外部 zip 软件。

这是 - https://www.npmjs.com/package/archiver-zip-encrypted。支持 WinZip 的传统 Zip 2.0 加密和 AES-256 加密。

于 2019-03-10T12:21:23.987 回答
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 和删除临时文件。

于 2013-02-12T14:19:13.483 回答