• ベストアンサー

CSVファイルのダウンロード

よろしくお願いします。 現在、ボタンを押すと(=CGI実行)フィルターによりCSVファイルが作成されるという様なものを開発しております。 しかし、その出来上がったCSVファイルをそのままダウンロードしたいと言う要望がありまして、そのCGIに組み込めないものかといろいろ調べております。 概要 (1)ボタンを押す(=CGI実行) (2)フィルターによりCSVファイル作成 (3)作成されたファイルをダウンロード という具合で、教えていただきたいのは(3)です((1)(2)は作成済み)。 実際にはCSVファイルは3つできるのですが、これらをまとめてダウンロード・・・というのはムリですよねぇ(第1希望)。 ムリなら、処理の中で圧縮させます(これぐらいはできます)ので、そのファイルをダウンロードさせるというやり方でも構いません(第2希望)。 実現が難しいようであれば実行結果画面に<a href= ~>で貼り付けます。 webサーバー・・・HP-UX web・・・IE CGI開発言語・・・Perl 開発端末・・・windows2000(Tera Term 使用) 以上、情報等お持ちの方いらっしゃいましたら、 よろしくお願いいたします。

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

  • ベストアンサー
  • EUR
  • ベストアンサー率61% (29/47)
回答No.1

CGIにて吐き出すソースのヘッダーを Content-Type: text/csv Content-Disposition: attachment; filename=××.csv にすれば大丈夫です。 ただし、ひとつのファイルのみのダウンロードになります。 作成するCGIの流れは、 1.CSVファイルの作成 2.標準出力に上記ヘッダーを出力 3.標準出力にCSVファイルを出力 となります。 例、hoge.csvをダウンロードさせたい場合 #!/usr/local/bin/perl print "Content-Type: text/csv\n"; print "Content-Disposition: attachment; filename=hoge.csv\n\n"; //----ここでCSV作成---- //できたCSVの中身を aaa,bbb,ccc,ddd とすると print "aaa,bbb,ccc,ddd\n"; これでダウンロードCGIにリンクするとダウンロードダイアログが表示され、hoge.csvをダウンロードできます。

kal1119
質問者

お礼

早速のご回答ありがとうございます。 上記参考に試したところうまくいきました。

その他の回答 (2)

  • EUR
  • ベストアンサー率61% (29/47)
回答No.3

たびたびすみません。 扱われるファイルがZIPならば、標準出力に吐き出す際に、バイナリとして吐き出すように注意してください。 逆にCSVならばテキストモードで吐き出してください。 ※参考ですが、ダウンロードさせたいファイルがZIPの場合、クライアント側で拡張子ごとの設定を行っていない限りは、ZIPファイルにリンクを張るだけでダウンロードが行えます。

kal1119
質問者

お礼

ご回答ありがとうございます。 参考になりました。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

Perlでzipファイルを扱えるモジュールがあります(参考 URL) これで圧縮したら、あとは#1さんの方法に準拠で。(ヘッダーをzipとする。)

参考URL:
http://www.ss.iij4u.or.jp/~somali/web/_archive_zip.html,http://www.memb.jp/~deq/perl/doc-ja/Archive-Zip.html
kal1119
質問者

お礼

早速のご回答ありがとうございます。 最終的に何をダウンロードするか(csv?,zip?)を確認して対応させていただきたいと思います。

関連するQ&A

専門家に質問してみよう