jQueryでZIPの解凍読み込み方法とは?
- ウェブサーバーにある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/ja … https://github.com/shogo82148/zipjs http://www.onicos.com/staff/iz/amuse/javascript/ … 要は、上記のように、 $.get('data.zip', function(data) { によってダウロードされてメモリ上にロードされたZIPファイルの中身がdataにあるので、 これを解凍したいということなのですが、 なにか良い方法はありませんでしょうか。 よろしくお願い致します。
- ogu-ne
- お礼率76% (23/30)
- JavaScript
- 回答数2
- ありがとう数8
- みんなの回答 (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の中身が表示されたけど。
その他の回答 (1)
- Taiyonoshizuku
- ベストアンサー率37% (183/489)
補足
回答いただきまして、ありがとうございます。 早速公開されているデモをテストしていました。 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ができる。) 解凍した際にフォルダを含まないように (フォルダを含んだ圧縮ファイルにならないように) 圧縮することはできませんでしょうか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- WIndows 2008にてZIP解凍
WIndows Server 2008にてZIPファイルをコマンドラインにて解凍したい。 できればし、フリーソフト等を入れたくないのですが
- ベストアンサー
- Windows系OS
- 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 XP
- Windows 7 標準のZip解凍が出来ない
Windows 7 のエクスプローラでZipファイルをダブルクリックしても解凍出来ないし、エクスプローラの右クリックメニュー(コンテキストメニュー)で「すべて展開(T)」が表示されない。 前に、フリーの解凍ソフトを何種類かインストールしたのが原因かと思うのですが、現在は、フリーのソフトは、すべてアンインストールしてあります。 Webページを参考に「regedit」でエクスプローラの「.Zip」を削除してみたのですが戻りません。 エクスプローラからZip形式への圧縮は行えます。(自分で圧縮したZipファイルも同じく解凍できません。) Windows 7 標準のZip解凍が出来るようにするにはどうすれば良いでしょうか。 ご教授下さい。
- ベストアンサー
- その他(ITシステム運用・管理)
- zipファイルの解凍について
ダウンロードしたzip形式の圧縮ファイル(動画)のアイコンが白いままで困ってます。 ダブルクリックしても開けて再生することが出来ません。 このファイルを開くプログラムをWEBから探してください、という表示画面になります。+Lhacaにドラッグドロップしても解凍できません。 ドラッグドロップしたファイルのショートカットアイコン(白いまま)が出来るだけです。 そもそもvistaはzipファイルの解凍、圧縮はOSだけで出来るはずですよね。 以前はダブルクリックだけで再生できていました。それが出来なくなったんです。 拡張子の関連付けがおかしいのはわかってるんですが、どのプログラムを関連付けたらいいんでしょう。
- ベストアンサー
- Windows Vista
- ZIPファイルにつきまして
初歩的なことだと思いますが、ZIPファイルにつきまして 教えてください。 ZIPファイルは、解凍した後は、解凍前のZIPファイルと、解凍後の ファイルになると思いますが、その場合に、解凍後には 元のZIPファイルには、データーは残っているのでしょうか、それとも 残っていなくて、殻になっているのでしょうか。 検索してみても、あまり、的確な回答が、見つからなかったのもです から、教えてください。 よろしくお願いいたします。
- ベストアンサー
- デスクトップPC
- windows7 zipファイル 解凍コマンド
windows7を使用しています。 定期的に自動でZIPファイルがあるフォルダに保存されます。 自動batでそれを解凍し中のファイルを加工したいと考えています。 その為、コマンドで解凍し、特定のフォルダに保存する方法を教えてください。 rundll32.exe zipfldr.dll ファイル名.zipでguiの解凍された(?)エクスプローラが開く事 はで来たのですが、意図した動作が出来ません。 zipファイルの中のファイルを任意のフォルダにコピーできれば良いのですが。。。
- ベストアンサー
- Windows 7
お礼
JSZip を使ってできました。 結局別の方法で実現することになりましたが、 回答いただきましてありがとうございました。 ちなみに JSZip は公式サイトの情報も豊富で、 とっつきやすかったです。
補足
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 中の、文字データの直後にある文でした。 何か環境が悪いのかもしれません。 もうしばらくテストしてみたいと思います。 ありがとうございます。