画像を右クリックして、名前を付けて保存しようとすると、CGI名がファイル名になり、jpgなのかpngなのかもわかりません。あらかじめファイル名を指定しておくことはできないのでしょうか?
以下のように書いています。
ファイルはサーバに残す必要はありません。(むしろ残さない方がいい)
use Image::Magick;
# オブジェクト作成
my $image = Image::Magick->new;
# 画像読み込み
$image->Read(sprintf($file, $id));
print "Content-type: image/jpg\n\n";
binmode STDOUT;
$image->Set(quality=>95);
$image->Write('jpg:-');
exit;
*.cgi の名前のCGI scriptで画像を返信するのではなく、一時的に結果をファイルに出力しておき、そこに redirectすればで実現できると思います。
ファイルがserverに残ってしまうのが嫌であれば、http://../foo.cgi/bar.jpeg などのURLで foo.cgiに redirectし、そこで転送後に消すなどすればいいのかも。
あとは、ファイル名が固定でよい(拡張子が .cgiなどになるのだけが問題)ならば、CGI scriptの拡張子を .jpgなどにして、そのdirectory だけ AddHandlerなどしておく手もあります。
以下のようにすれば指定できます
print "Content-type: image/jpg; name=hoge.jpg\n"; print "Content-disposition: attachment; filename=hoge.jpg\n"; print "\n"; binmode STDOUT;
ありがとうございます。なぜかうまくいきませんでした
ありがとうございます。この方法でうまく行きました。