2012-03-23 27 views
5

Node.jsを使用して既存のフォルダからzipファイルを作成し、その構造を保存しようとしています。フォルダからzipアーカイブを作成し、Node.jsで構造を保存する

私はこの種のものを許可するように、単純なモジュールになりそこに期待していた

archiver.create("../folder", function(zipFile){ 
    console.log('et viola'); 
}); 

が、私は一種の何かを見つけることができません!

私は周りを探索しています。これまでに見つかった最高のものはジップストリームですが、私が望むことをする方法がない限り、わかります。私はアプリがクロスプラットフォームでなければならないので、コマンドラインユーティリティを呼びたくはありません。

ご協力いただければ幸いです。

ありがとうございました。

答えて

2

完全にコードフリーではありませんが、folder.jsと組み合わせてnode-native-zipを使用できます。使用法:

function zipUpAFolder (dir, callback) { 
    var archive = new zip(); 

    // map all files in the approot thru this function 
    folder.mapAllFiles(dir, function (path, stats, callback) { 
     // prepare for the .addFiles function 
     callback({ 
      name: path.replace(dir, "").substr(1), 
      path: path 
     }); 
    }, function (err, data) { 
     if (err) return callback(err); 

     // add the files to the zip 
     archive.addFiles(data, function (err) { 
      if (err) return callback(err); 

      // write the zip file 
      fs.writeFile(dir + ".zip", archive.toBuffer(), function (err) { 
       if (err) return callback(err); 

       callback(null, dir + ".zip"); 
      });      
     }); 
    });  
} 
+0

非常にありがとうを!ジップは作成されますが、残念ながら破損して空に見えます。私はそれと一緒に遊んで、問題が何であるか試してみるでしょう。 – user1257359

+0

実際には、わずかに*破損しているようです) 作成したジップを試してみると空に見えますが、解凍すると内容は上手く見えます。 すばらしい、すばやい答えをありがとう! – user1257359

+0

魅力的な作品! – Tim

1

これは、ノードの組み込みexecfile関数を使用してさらに簡単に行うことができます。プロセスを生成し、ネイティブにosを介してzipコマンドを実行します。すべてがうまくいく。あなたがsibdirectoryをビュンされ、zipファイル内の過度のネストをしたくない場合は

var execFile = require('child_process').execFile; 

execFile('zip', ['-r', '-j', zipName, pathToFolder], function(err, stdout) { 
     console.log(err); 
     logZipFile(localPath); 
    }); 

-jフラグは、ファイルパスを「ジャンク」。

ここにはsome documentation on execfileです。 ここにa man page for zipがあります。 Easy-zipnpm install easy-zipを使用して

+0

オペラは、ネイティブでクロスプラットフォームで、コマンドラインコールではないと明確に言いました。 – JohnC

-1

、あなたが行うことができます:

var zip5 = new EasyZip(); 
zip5.zipFolder('../easy-zip',function(){ 
    zip5.writeToFile('folderall.zip'); 
}); 
+1

[この問題](https://github.com/owenchong/easy-zip/issues/2)のためにこれを使用することはお勧めしません。 – rax

+0

私は最近、 'easy-zip'を使用していて、@raxがハイライト表示されているという問題にぶち込まれていません。 – developius

関連する問題