CGIを介したダウンロードで拡張子をcgiじゃなくするには

[上に] [前に] [次に]
さとちん [E-Mail] 2000/01/21(金) 13:21:43
ファイルをダウンロードする処理を作成しているのですが<href>で
ファイルの存在場所にリンクをする事がちょっとした事情で出来ません。
 それで、cgiを使用して目的のファイルの拡張子に対応するmimeタイプを
ヘッダに付加してから、ファイル内容を出力(cでfread()を使用)している
のですが、ファイルダイアログでファイルを保存する時に拡張子が"cgi"に
なってしまいます。
 cgiでダウンロード処理をする時に任意の拡張子がついた状態でファイル保存
出来る方法はないでしょうか?

 アドバイス宜しくおねがいします。 

EMI 2000/01/21(金) 13:38:33
.htaccessが使えるなら、そのCGIの置いてあるディレクトリに.htaccessを作成し、
  Addtype "application/x-httpd-cgi" lzh
などとして、CGIの拡張子をlzhにすればいいのでは。
まぁ、拡張子だけじゃなく、ファイル名全体をダウンロードファイルと同じにするのが一番いいでしょう。
あ、lzhの部分は必要に応じて書き換えてください。

‥‥‥ところで、CGIのMIMEタイプって上ので合ってましたっけ?

鉄人 2000/01/21(金) 13:56:58
サンプルなのでperlで書きますけど、

print "Content-type: application/download\n";
print "Content-disposition: filename=\"aaa.xxx.\"\n\n";
print "ああああああ\n";
print "ああああああ\n";
print "ああああああ\n";
print "ああああああ\n";
print "ああああああ\n";

とやると、CGIで任意に指定したファイル名でダウンロードさせることができます。

ふじ 2000/01/21(金) 15:04:59
変則技かも知れませんが、CGIを呼ぶときに

http://hoge.co.jp/cgi-bin/download.cgi/aaa/bbb/ccc.txt

みたいに呼べば(CGI側では引数を環境変数 PATH_INFO で受ける仕様にする)
ダウンロードするときのファイル名が ccc.txt になります。

さとちん [E-Mail] 2000/01/21(金) 15:51:01
[[解決]]
EMIさん鉄人さんありがとうございました!!
おかげて解決致しました。

今回はcgiがファイル名を受け取り任意のファイルを出力する為
拡張子が一つとは限りませんでしたので鉄人さんのmimeヘッダを
付加する方法にさせて頂く事にしました。
EMIさんのも参考になりました。".htaccess"頭に入れときます。

しかし、Content-disposition:ってどういう時に使うヘッダ
なのですか?

もしよろしかったらmimeヘッダの一覧がわかりやすく書いてある
HPなり本なりがあったら教えて頂きたいのです。

本当にありがとうございました。

「とほほ」さん。
 こういう場を設けてくれてうれしいです。
 大変かもしれませんが応援してますので続けてくださいね。

さとちん 2000/01/21(金) 15:59:43
ふじさんも発言ありがとうございました!!

 なるほど、こういう方法もあるのですね。
 参考になります。

ふじさんの発言が届く前から以前発言していただいた方の
のアドバイスの見ていたのでお礼できていませんでした。
スイマセン

EMI 2000/01/21(金) 16:03:10
RFC2068(HTTP1.1)が一番でしょう。
http://www.ring.gr.jp/pub/doc/RFC/rfc2068.txt

さとちん 2000/01/21(金) 16:07:04
[[解決]]
これにて一件落着です

[上に] [前に] [次に]