2013-02-12 457 views
5

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

私は残念ながらパスワード保護をサポートしていないことを、「ノード・ジップ」モジュールを使用しています:

ZIPファイルを作成するために、他のノードモジュールを探し
var zip = new require('node-zip')(); 
zip.file('test.file', 'hello there'); 
var data = zip.generate({base64:false,compression:'DEFLATE'}); 

、私はパスワード保護をサポートする任意のを発見していません。

+1

Google "create zip node js"?試してみてくださいhttp://stackoverflow.com/questions/5754153/zip-archives-in-node-js最初のリンクを読んだら、コマンドラインツールを起動する方法です。 –

答えて

7

あなたが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

+0

解決策はOKですが、「オンザフライで」ファイルを作成する必要があります。ファイルシステムにファイルが存在しない(機密データが含まれている)ことを意味します。 私が知っているように、あなたはzipコマンドにコンテンツ付きのファイル構造を渡すことはできませんよね? – greuze

+1

あなたはファイル内ではなく、変数にあるデータを圧縮することを意味します。 Zipは、圧縮されるファイルの名前として単一のダッシュ( " - ")も受け入れます。この場合、ファイルは標準入力から読み込まれます。生成された子プロセスzip.stdin.write(data)のstdinにファイルの内容を書き込むことができます。 stdinの例を同じページで探します。 http://nodejs.org/api/child_process.html#child_process_child_stdin – user568109

+0

具体的な名前のzip内に2つのファイルを書き込む必要があります(ファイル名として「 - 」を使用しましたが、名前はzipファイル内に残っています) )。 node-zipで作成したファイルを解凍し、zipコマンドでパスワードを使用して再度圧縮するには、一時ディレクトリを使用する必要があります:( – greuze

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、一時ファイルを削除します。私がやったように、ここで終わる人のため

2

、私はノードに複数のパッケージを試してみましたが、このいずれかを使用して終了:https://www.npmjs.com/package/minizip-asm.js

それは、パスワード(AESを使用)をサポートし、本当に使いやすいです。私はそれが私がサポートするパスワードを見つけた唯一のものであることを考えれば、ダウンロードがそれほど多くないことに驚いている。

関連する問題