6

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

この種のことを可能にする単純なモジュールがあることを望んでいました:

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

しかし、私はそのようなものを見つけることができません!

私はグーグルで検索してきましたが、これまでに見つけた最高のものはzipstreamですが、私が知る限り、私がやりたいことをする方法はありません. アプリはクロスプラットフォームでなければならないので、コマンドラインユーティリティを呼び出したくありません。

どんな助けでも大歓迎です。

ありがとう。

4

3 に答える 3

2

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

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");
            });                    
        });
    });    
}
于 2012-03-23T15:23:09.340 に答える
1

これは、ノードの組み込み execfile 関数を使用してさらに簡単に行うことができます。プロセスを生成し、OS を介してネイティブに zip コマンドを実行します。すべてが機能します。

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

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

-j フラグは、sibdirectory を圧縮する場合にファイル パスを「ジャンク」し、zip ファイル内で過度のネストを行いたくない場合に使用します。

execfile に関するドキュメントを次に示します。これは zip の man ページです。

于 2012-08-15T17:33:58.890 に答える
0

Easy-zipを使用するとnpm install easy-zip、次のことができます。

var zip5 = new EasyZip();
zip5.zipFolder('../easy-zip',function(){
    zip5.writeToFile('folderall.zip');
});
于 2014-03-21T12:08:58.837 に答える