2013-03-07 1 views
6

とブロブジップjavascriptの - 私はので、私は<a href="http://gildas-lormeau.github.com/zip.js/">zip.js</a> でテキストを圧縮し、ドキュメントからの圧縮ブロブ</p> <p>を保存することを決めたあなたはブロブを圧縮することができ、WebSQlに大量のテキストを保存する必要がzip.js

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); 
} 

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

乾杯

答えて

3

はここにこの答えをチェックしてください - それは、ファイル名を必要としない、と私は使用してはるかに簡単に賭けます。私は非常にいくつかのJavaScriptの圧縮/解凍の実装を試みて、元のデータのサイズ、全体的な速度、効率などの問題に悩まされてきました。 JavaScriptで良好な圧縮/解凍の実装を見つけることが妙に難しいですが、ありがたいことに、この1はまだ私を失敗していない(と私はそれを使用しましたかなり):

Compressing a blob in javascript

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

+0

非常に素晴らしいです!圧縮はzip.jsほど良くはありませんが、非常に興味深い選択肢です! thnx –

+0

私の喜びJeanluca、それを聞いてうれしいあなたのための潜在的な選択肢かもしれません。はい、zipが圧縮の観点からLZJBを大きく突き抜けてしまう例は間違いありません。いくつかの種類のデータでは、それはほぼ同等のものになります。しかし、それは超高速であり、このブラウザサイド速度を実行しているのであれば、通常は非常に重要です。少なくとも私の経験では、開発者にとって使いやすいという利点が常にあります。また、そこにはいくつかの非公開のbase64エンコード/デコードメソッドがあり、必要に応じてポストでわずかに変更されたバージョンで公開されませんでした。 – hoonto

+0

Jeanluca、ちょうどあなたのためにここにノートを残して - そのリンクの私の例では、typoがありました、上にfastcompressorオブジェクトの宣言の後にセミコロンがありません。だからあなたはそれを知って欲しかった。私はちょうどそれを修正した。 – hoonto

2

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

元の例では、zipWriter.add()はBLOBを新しいファイルに効果的に変換し、zipに追加します。「filename」パラメータは、新しいファイルに含める名前です。ここで

はジップに複数のブロブを追加するzip.jsを使用して、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); 
} 
関連する問題