とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


perl:cgi_filedownload

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

perl:cgi_filedownload [2017/12/14 20:18]
perl:cgi_filedownload [2020/06/23 14:10] (現在)
行 1: 行 1:
 +====== ファイルをダウンロードさせる - Perl,CGI ======
 +~~socialite~~
 +<note important>この記事は2006年10月21日に書かれたものです。</note>
 +
 +テキストファイルや画像などを表示させるのではなく、ダウンロードをさせたい。
 +
 +{{:perl:fdl_ie-thumb.jpg?nolink|}}
 +
 +IEやFireFoxなどのブラウザでは、圧縮ファイル(zip, lha)などはファイルを保存するダイアログを自動的に出してくれるが、CSVなどのテキストファイルの場合、ただ表示されるだけである。
 +
 +下記のようなヘッダを出力する部分を置き換えればOK。
 +''print "Content-type: text/html\n\n";''
 +
 +===== サンプル =====
 +<code perl>
 +#!/usr/bin/perl
 +;#
 +;#ダウンロード
 +;#
 +
 +#-- ダウンロード後のファイル名 --#
 +$file = 'stock_yahoo.csv';
 +
 +#-- ダウンロード --#
 +print "Content-Type: application/octet-stream\n";
 +print "Content-Disposition: attachment; filename=$file\n";
 +print "\n";
 +
 +#-- 内容を出力 --#
 +while(<DATA>){
 +  print ;
 +}
 +
 +__END__
 +日付,始値,高値,安値,終値,出来高(株)
 +10月20日,"46,700","47,150","45,150","45,500","261,883"
 +10月19日,"48,600","49,100","46,900","47,450","323,015"
 +10月18日,"46,850","49,100","45,650","48,650","379,219"
 +10月17日,"46,550","47,650","45,500","46,900","335,802"
 +10月16日,"43,750","47,050","43,700","46,950","455,565"
 +10月13日,"41,450","43,600","41,450","43,350","369,306"
 +10月12日,"39,700","41,700","39,500","41,200","317,911"
 +10月11日,"40,650","40,650","39,150","39,300","296,626"
 +10月10日,"40,950","41,400","40,450","40,600","128,643"
 +</code>
 +
 +===== 実行例 =====
 +FireFoxの場合
 +
 +{{:perl:fdl_firefox-thumb.jpg?nolink|}}
 +
 +Excelで開いてみた
 +
 +{{:perl:dl_excel.jpg?nolink|}}
 +
 +大抵のブラウザでは正常に動作するが、一部ファイル名の指定が出来ない(CGIのファイル名になる)などの現象が起こる場合がある。この場合はクエリー文字列を工夫することで解決することもある(「dl.cgi?file=xxx.csv」など)
 +
 +余談だが、ファイルハンドル「DATA」は特殊な意味を持つ。これは通常のファイルではなく「''__ END __''」以下にある内容を操作する際に用いる。ここではDATAを用いているが、普通のファイルを読み込み、その結果を返却しても良いし、データを動的に生成して返しても良い。内容はあなた次第。
 +
 +※さらに余談だが、mod_perl環境下では「''__ END __''」を書いてはならないという制約があるので注意。
 +
 +===== 関連書籍 =====
 +{{amazon>jp:4797336803}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:4274068765}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00ISP0OM8}}
 +<html><p style="clear:both"></p></html>
 +
 +{{tag>CGI・Perl例文集 Perl CGI ダウンロード}}
 +~~socialite~~
  

関連ページ