IEでダウンロードファイルの拡張子を.txtにするには?

[上に] [前に] [次に]
くろい 1999/11/17(水) 14:01:21
画面のリンクからファイルをダウンロードするCGI(download.cgi)
をperlで作り、次のようなリンクでCGIを呼んでいます。
<a href="download.cgi/filename.txt">ダウンロード</a>

NNではfilename.txtで保存できるのですが、
IEでは下記のような挙動になり困っております。
・Content-Typeをapplication/octet-streamにすると
 ファイルの拡張子が何であろうとも出力した内容が画面に表示される。
・Content-Typeをapplication/x-compressにすると
 ファイルを保存するか実行するかのダイアログがあがるが、
 拡張子が.zに変わる。

CGIで次のような感じでContent-Typeの指定をすれば良いと
考えていたのですが何か問題があるのでしょうか。
 print "Content-Type:application/octet-stream\n\n";

それとも、何かサーバーの設定が必要なのでしょうか。
ちなみにサーバーはapache1.3.6を使用しております。
どなたかよろしくご教授願います。

ふじ 1999/11/17(水) 14:37:41
IEは Content-Type を無視(参考?)にして、
本体の内容を見て勝手に判断するんですよね・・・

print <<END
Content-Type:application/octet-stream
Content-Disposition: attachment; filename="filename.txt"

END

こんな風に、Content-Disposition ヘッダを指定してやれば
上手くいきませんか?
#とりあえず IE5 (WinNT) ではダウンロードのダイアログが出ました。

くろい 1999/11/17(水) 22:09:31
ふじさん、回答ありがとうございます。
Content-Dispositionを試してみましたところ、
Win98+IE5.0ではうまくいったのですが、
Win98+IE4.0では画面に表示されてしまいます。
ファイル名から.txtを削除しても画面に表示されるところを見ると、
IE4.0ではapplication/octet-streamの指定が有効でないように
思いますがいかかでしょうか。

ふじ 1999/11/17(水) 22:23:43
>IE4.0ではapplication/octet-streamの指定が有効でないように
>思いますがいかかでしょうか。
そうみたいですね。
#ここら辺の挙動も IE4 と 5 で違うのか・・・

Content-Type を見ないで、データ本体の内容(+拡張子?)で判断しているようなので。
HTMLタグ(らしきもの)が入ったテキストファイルを
HTMLとして解釈して表示してくれるのでエライ迷惑です。

私も解決法は知らないので・・・誰か教えて。

#以下実験。

拡張子無し(サーバが Content-Type: text/plain を付ける)
のファイルを作って IE5 で見たところ、
中身が

<HTML>
<BODY>
<P>test</P>
</BODY>
</HTML>

だと HTML として表示し、中身が

<P>test</P>

だとテキストファイル扱い、更に

<P>test</P>
<IMG src="/title.gif">

だと、HTMLとして表示しやがりました。わけ分からん。
# NN だと全てテキストファイルとして表示します。

くろい 1999/11/20(土) 16:21:10
text/plainを指定してもHTML表示される場合なんてあるんですね。
初めて知りました。

やはりIEでテキストファイルをダウンロードするときには
左クリックで「ファイルに保存」とするしかないのでしょうか。

らー 2000/03/09(木) 23:31:41
text/download
にすると・・あらビックリ。

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