サーバー上のファイルをダウンロードさせる方法

CGIテクニック集トップへ





概要

サーバー上にあるファイルを、MIME Typeに関わらずブラウザのポップアップウィンドウを開きユーザーにダウンロードさせる方法です。ユーザーは、そこでアプリケーションを開くか、ファイルに保存するか選択できます。 アップダウン2クリプトアップで使われています。

必用な処理

  1. HTTPのヘッダを指定する。
  2. ダウンロードするファイルを開く。
  3. ファイルハンドルをbinmodeに指定する。
  4. ファイルを読み込みSTDOUTに出力する。
  5. ファイルハンドルをクローズする。

サンプルコード

 print "Content-Type: application/download\n";
 print "Content-Disposition: attachment; filename=\"$file\"\n\n";
 open (FILE, "< $dlfile");
 binmode FILE;
 binmode STDOUT;
 print while (<FILE>);
 close(FILE);

コードの解説

 print "Content-Type: application/download\n";
 print "Content-Disposition: attachment; filename=\"$file\"\n\n";

HTTPヘッダを指定します。Content-Typeは、application/downloadとします。Content-Dispositionのfilenameは、ポップアップウィンドウに表示されるデフォルトファイル名で、サーバーにあるファイル名ではありません。この名前は何でも構いません。ユーザーは、保存する時に変更できます。

 open (FILE, "< $dlfile");

サーバー上のダウンロードさせたいファイルを開きます。

 binmode FILE;
 binmode STDOUT;

開いたファイルをbinmode指定します。開くファイルは、バイナリファイルの場合もあるのでbinmodeをする必要があります。ダウンロードさせるファイルは、標準出力に表示するのでSTDOUTもbinmode指定します。

 print while (<FILE>);

ファイルを標準出力に出力します。これでファイルはダウンロードされます。

 close(FILE);

終わったらファイルをクローズします。

関連するCGIテクニック

ファイルアップロードの仕方