BLOG

Go to top


「ディスクに保存する」、「ファイルのダウンロード」をさせる

August 30, 2007 11:24 PM

そういえば、前の会社でちょっと悩んだことがあったな…と思ったので、忘れないうちにメモしておくことにします。要は Content-Type エンティティ・ヘッダフィールドの指定なのだけれど。perl で書くなら、以下のような感じでしょうか。

			
my $file;
open(DL, $download_file);
read(DL, $file, (-s $download_file));
close(DL);

$download_file = substr($download_file, (rindex($download_file, "/") + 1) );
print "Content-type: application/octet-stream\n";
print "Content-disposition: attachment; filename=\"$download_file\"\n\n";

print $file;

Content-disposition を Content-type より先に記述したら、なぜかダウンロードしたファイルにContent-disposition の内容が記述されていたので Content-type を先に送るようにしました。

あと、IEは Content-Type エンティティ・ヘッダフィールドの指定をあまり気にしてくれず、ファイルの中身を見て判断したりしやがるので、テキストファイルだと普通にブラウザに表示したりします。「Content-Type:text/download」を指定すればうまくいく可能性があるにはあるけれど、結局のところIEのこの辺りの挙動はとにかく信用できないので、ユーザには右クリックから保存してもらうのが無難かと思われます。

Comments


Contact me

Copyright © 2005 - 2017 okayama All rights reserved.