6

WebSQl に大量のテキストを格納する必要があるため、テキストをzip.jsで圧縮し 、圧縮された Blob を格納することにしました。

ドキュメントから、次のようにブロブを圧縮できます

function zipBlob(filename, blob, callback) {
   // use a zip.BlobWriter object to write zipped data into a Blob object
   zip.createWriter(new zip.BlobWriter("application/zip"), function(zipWriter) {
      // use a BlobReader object to read the data stored into blob variable
      zipWriter.add(filename, new zip.BlobReader(blob), function() {
         // close the writer and calls callback function
         zipWriter.close(callback);
      });
   }, onerror);
}

これは機能しますが、ファイル名を指定する必要がある理由がわかりません。これは本当に必要ですか?そして、このファイルは圧縮後に常に削除されますか?

乾杯

4

2 に答える 2

3

ここでこの回答を確認してください-ファイル名は必要ありません。使いやすいと思います。私はかなりの数の JavaScript 圧縮/解凍の実装を試しましたが、元のデータのサイズの制限、全体的な速度、効率などの問題に悩まされてきました。javascript で適切な圧縮/解凍の実装を見つけるのは奇妙なことに困難ですが、ありがたいことに、これはまだ私を失敗させていません (そして私はそれをかなり使用しました):

JavaScriptでブロブを圧縮する

現在の実装では、zip との一貫性を保つためにファイル名が必要です。これにより、たとえばデスクトップに保存して、お気に入りの zip ユーティリティで開くことができます。あなたの挑戦は私のものと非常に似ているように思えます.サーバーだけでなく、ブラウザのローカルストレージから圧縮されたアイテムを保存して復元する必要がありました.

于 2013-06-19T03:06:56.560 に答える
2

この実装では、ファイル名が必要です。データを圧縮するだけの場合は必要ありませんが、zip.js はファイルを格納する zip ファイルを作成し、ファイル名が必要です。

元の例では、zipWriter.add() は効果的にブロブを新しいファイルに変換し、それを zip に追加します。「filename」パラメーターは、その新しいファイルに付けたい名前です。

zip.js を使用して複数の BLOB を zip に追加し、FileSaver.js でダウンロードする例を次に示します。

function zipBlob() {
    zip.createWriter(new zip.BlobWriter("application/zip"), function(writer) {
        files = ["abcd", "123"];
        var f = 0;

        function nextFile(f) {
            fblob = new Blob([files[f]], { type: "text/plain" });
            writer.add("file"+f, new zip.BlobReader(fblob), function() {
                // callback
                f++;
                if (f < files.length) {
                    nextFile(f);
                } else close();
            });
        }

        function close() {
            // close the writer
            writer.close(function(blob) {
                // save with FileSaver.js
                saveAs(blob, "example.zip");
            });
        }

        nextFile(f);

    }, onerror);
}
于 2015-04-20T03:02:45.093 に答える