jQueryでZIPの解凍読み込み方法とは?

このQ&Aのポイント
  • ウェブサーバーにあるCSVをクライアントで見るための方法として、jQueryを使います。
  • 最近CSVファイルの容量が大きくなり、FTPアップロードに時間がかかるため、CSVをZIP圧縮して上げることにしました。
  • クライアント側でもZIPファイルを読み込むための方法を探しています。
回答を見る
  • ベストアンサー

jQueryでzipを解凍読み込みするには?

ウェブサーバーにあるCSVの内容をクライアントで見るため、jQueryを使い、   $.get('data.csv', function(data) {     var csv = $.csv()(data);     $(csv).each(function(index) {       // 読み込んだデータを処理       //     :     });   }); のようなことをしています。 最近CSVファイルの容量が大きくなってきて、 ウェブサーバーにCSVをFTPアップロードするのに時間がかかるようになったため、 CSVをZIP圧縮して上げることとなりました。 そこでクライアント側でも、   $.get('data.csv', function(data) { の部分のファイル名をZIPファイルのものにして、   $.get('data.zip', function(data) { として、ZIPファイルを読み込むように修正しました。 その結果、ZIPファイルの内容はdataに読み込まれているようです。 しかし、ここからどうやって解凍してやればいいか分かりません。 ZIP解凍をウェブで検索していろいろと試してみたのですが、 うまく動作しなかったり、使い方が分からなかったりでした。。 それぞれどういう結果でうまく動作しなかったのかをここできちんと書くのは難しいですが、 例えば、以下のようなものです。 http://d.hatena.ne.jp/end0tknr/20110109/1294582088 http://polygon-planet-log.blogspot.jp/2012/04/jahttps://github.com/shogo82148/zipjs http://www.onicos.com/staff/iz/amuse/javascript/ … 要は、上記のように、   $.get('data.zip', function(data) { によってダウロードされてメモリ上にロードされたZIPファイルの中身がdataにあるので、 これを解凍したいということなのですが、 なにか良い方法はありませんでしょうか。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

んー、jquery.zip.jsを読み込んで $(function(){ $.get('test.zip', function(archive){ console.debug(archive.files); for (var i in archive.files){ var file = archive.files[i]; console.log('========='); console.log(file.name); console.log(file.filesize); console.log(file.inflate()); }}) }); これを試しただけでfile.inflate()でcsvの中身が表示されたけど。

ogu-ne
質問者

お礼

JSZip を使ってできました。 結局別の方法で実現することになりましたが、 回答いただきましてありがとうございました。 ちなみに JSZip は公式サイトの情報も豊富で、 とっつきやすかったです。

ogu-ne
質問者

補足

Taiyonoshizuku 様 重ねて回答をありがとうございます。 動くところでは問題なく動くのですね。 当方、サンプルの test.html を今回提示いただいたソースに置き換えて、  $(function(){    test_get('./test_utf8.zip')  })  function test_get(filepath)  {    $.get(filepath, function(archive){      console.debug(archive.files);      for (var i in archive.files){        var file = archive.files[i];        console.log('=========');        console.log(file.name);        console.log(file.filesize);        console.log(file.inflate());      }    })  } のような感じにしてみてデバッガで実行してみたところ、 $.get(filepath, function(archive) までは来るのですが、 中に入らず、console.debug(archive.files); が実行されることなしに抜けてしまいます。 さきほど気がついたのですが、エラーが上がっていました。 「 RangeError: invalid array length ...".replace(/~(..)/g,function(A,E){return Array(parseInt(E,36)+1).join(" ")});Stri... 」 だそうで、これは jquery.zip.js 中の、文字データの直後にある文でした。 何か環境が悪いのかもしれません。 もうしばらくテストしてみたいと思います。 ありがとうございます。

その他の回答 (1)

回答No.1
ogu-ne
質問者

補足

回答いただきまして、ありがとうございます。 早速公開されているデモをテストしていました。 test.html を表示させると、 test_get('./test_utf8.zip') が呼ばれ、 その中の $.get(filepath, function(zip){ で zip にデータがダウンロードされるところまでは動作するのですが、 for (var name in zip.files) で zip.files が undefined のため、 なにも動作しません。 この zip.files は、圧縮したファイル名なのかなと思い (例えば、data.csv を圧縮して data.zip を作成した場合は data.csv)、 強引にファイル名を指定してみるも、 次の addentry() で zip.files[name] に失敗してしまいます。 (そりゃそうですよね...。) 結果からすると、これも動作しませんでした。 私の実行の仕方に問題があるのかも知れませんが、 正直スキルがそこまでスキルが高くなくて分かりませんでした。 また何かヒントがありましたら、よろしくお願い致します。

関連するQ&A

  • プログラムの中でzipファイルのダウンロード

    zend framework を使って開発してます。 あるサイトからzipファイルをDLし、中のCSV情報を取得する必要があるのですが、 うまい方法が思いつきません。 zend frameworkを使っているので、 Zend_Http_Clientを使用するのが筋かなと思っており、 ただ、その場合、取得したzipファイルのバイナリデータを、 ファイルに保存→解凍してcsvファイルの情報を取得というステップが必要になります。 ファイルに保存する前のバイナリデータをそのまま解凍してcsv形式に展開といったことはできないのでしょうか? 現在下のような形で実現させていますが、前述した通り非常に遠回りしてる気がします。 それに、バイナリデータを一旦zipファイルとして保存しなければならないのであれば、 Zend_Http_Clientを使わずにwgetで取得した方がまだいいんじゃないかとも思ってます。 ---------------------------------- $client = new Zend_Http_Client( $url ); $value = $client->request('GET'); # zipファイルとして保存 $fp = fopen("./test.zip", "w" ); fputs($fp, $value); fclose( $fp ); # 解凍 $inflating_file = exec( 'unzip -o '."./test.zip" ); # CSVファイル名取得 $inflating_file = trim( str_replace( 'inflating:', '', $inflating_file ) ); # CSVファイルの展開 $handle = fopen("test.csv", "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { for ($c=0; $c < $num; $c++) { } } fclose($handle);

    • 締切済み
    • PHP
  • C# フォルダを含まないzipは?

    C#で作成した、CSVをFTPでウェブサーバにアップロードするプログラムがあるのですが、 運用と共にCSVファイルのサイズと数が増えパフォーマンスが悪くなってきたので、 CSVをZIPで圧縮することにしました。 C:\data\read.csv を読み込んで同じ場所に write.zip として出力するという処理を、 System.IO.Compression 系の ZipArchive を使って、   using (var zipStream = File.Create(@"C:\data\write.zip")) {     using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create)) {       var entry = archive.CreateEntry("read.csv");       using (var sourceStream = File.OpenRead(@"C:\data\read.csv")) {         using (var entryStream = entry.Open()) {           sourceStream.CopyTo(entryStream);         }       }     }   } のようにしてみたところ、C:\data\write.zip は作成されるのですが、 これを解凍すると write\read.csv となってしまいます。 (write フォルダができて、その下に元のCSVができる。) 解凍した際にフォルダを含まないように (フォルダを含んだ圧縮ファイルにならないように) 圧縮することはできませんでしょうか? よろしくお願いします。

  • WIndows 2008にてZIP解凍

    WIndows Server 2008にてZIPファイルをコマンドラインにて解凍したい。 できればし、フリーソフト等を入れたくないのですが

  • Javaで自己解凍ファイルを作るには?

    言語:Java WEBサーバ:Linux クライアント:Windows 以上の環境で Linux-Java側で、自己解凍ファイルを生成して、 Windowsクライアントでダウンロードし、 自己解凍できるようなファイルを作成できますでしょうか? java.util.zip.*を見てみましたが、わかりませんでした。

    • ベストアンサー
    • Java
  • ZIPファイルの解凍について

    PSP-2000でUSBを使ってセーブデータを保存し、ZIPファイルだったり、変換したのでので「Lhaplus」を使って解凍しようとしたところ「アプリケーションが見つかりません。」と、表示され解凍できません。どうすればよいでしょう? OSはWindowsVista homeベーシックです。

  • XPでのZIPファイルの解凍について

    つまらない質問ですが… XPにして数年経ちます。 最初、ZIPファイルをそのまま解凍できなかったと記憶していますが、 その為、解凍レンジなどの解凍ソフトを入れてました。 ダブルクリックで解凍すると「解凍中xx%」みたいな表示が出て解凍されましたが、 最近、その表示が無くてもzipフォルダが開けるようになりました。 ※XP標準の圧縮 (zip 形式) フォルダ機能? そこで質問ですが 最近その当たりのパッチが出て、動作がかわったのでしょうか? それとも私の勘違いなのでしょうか? 宜しくお願いします。

  • Windows 7 標準のZip解凍が出来ない

     Windows 7 のエクスプローラでZipファイルをダブルクリックしても解凍出来ないし、エクスプローラの右クリックメニュー(コンテキストメニュー)で「すべて展開(T)」が表示されない。  前に、フリーの解凍ソフトを何種類かインストールしたのが原因かと思うのですが、現在は、フリーのソフトは、すべてアンインストールしてあります。  Webページを参考に「regedit」でエクスプローラの「.Zip」を削除してみたのですが戻りません。  エクスプローラからZip形式への圧縮は行えます。(自分で圧縮したZipファイルも同じく解凍できません。)  Windows 7 標準のZip解凍が出来るようにするにはどうすれば良いでしょうか。  ご教授下さい。

  • zipファイルの解凍について

    ダウンロードしたzip形式の圧縮ファイル(動画)のアイコンが白いままで困ってます。 ダブルクリックしても開けて再生することが出来ません。 このファイルを開くプログラムをWEBから探してください、という表示画面になります。+Lhacaにドラッグドロップしても解凍できません。 ドラッグドロップしたファイルのショートカットアイコン(白いまま)が出来るだけです。 そもそもvistaはzipファイルの解凍、圧縮はOSだけで出来るはずですよね。 以前はダブルクリックだけで再生できていました。それが出来なくなったんです。 拡張子の関連付けがおかしいのはわかってるんですが、どのプログラムを関連付けたらいいんでしょう。

  • ZIPファイルにつきまして

    初歩的なことだと思いますが、ZIPファイルにつきまして 教えてください。 ZIPファイルは、解凍した後は、解凍前のZIPファイルと、解凍後の ファイルになると思いますが、その場合に、解凍後には 元のZIPファイルには、データーは残っているのでしょうか、それとも 残っていなくて、殻になっているのでしょうか。 検索してみても、あまり、的確な回答が、見つからなかったのもです から、教えてください。 よろしくお願いいたします。

  • windows7 zipファイル 解凍コマンド

    windows7を使用しています。 定期的に自動でZIPファイルがあるフォルダに保存されます。 自動batでそれを解凍し中のファイルを加工したいと考えています。 その為、コマンドで解凍し、特定のフォルダに保存する方法を教えてください。 rundll32.exe zipfldr.dll ファイル名.zipでguiの解凍された(?)エクスプローラが開く事 はで来たのですが、意図した動作が出来ません。 zipファイルの中のファイルを任意のフォルダにコピーできれば良いのですが。。。

専門家に質問してみよう