鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

javascriptでzip圧縮する

zip.jsというライブラリがあるようで、

それを使おう。使い方を調べなくては・・・ http://gildas-lormeau.github.io/zip.js/

でも、なんだか使い方が難しそうなのでgzipにしてみよう

https://github.com/ukyo/jsziptools

うーん。これもどうもblobデータからの圧縮がうまくいかないなぁ。

JSZipというライブラリもあるらしい。こっちにしてみるか・・・(これが本命?)

compression - Compressing a blob in javascript - Stack Overflow

変数blobのデータをzip圧縮してサーバに送るコード。 FileReaderでネストが1段深くなるのがなぁ・・ Promise使ってうまく書けると思うのですが。

  var arrayBuffer;
  var fileReader = new FileReader();
  fileReader.onload = function() {
      arrayBuffer = this.result;

      var zip = new JSZip();
      zip.file("audio.wav", arrayBuffer, {binary:true});
      var content = zip.generate({type:"blob"});

      var formData = new FormData();
      formData.append("audio",content,"audio.zip");

      $.ajax({
        type: "post",
        url: "/upload",
        data : formData,
        processData: false,
        contentType: false,
        dataType: 'json',
        success: function(data){
          console.log("ok");
        },
      error: function(){
          console.log("failed");
        }
      });

  };

  fileReader.readAsArrayBuffer(blob);