14

パスワードで保護されたZIPファイルをnode.jsに作成する必要があります。

私は「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からのレガシーZip2.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 に答える