GDを使用して動的に画像を作成するPerlDancerWebアプリケーションがあります。これらの画像をPNGとしてユーザーに配信しようとしています。例えば:
package MyApp;
use Dancer ':syntax';
use GD;
...
get '/dynamic_image/:var1/:var2' => sub {
my $im = GD::Image->new(100,100);
my $black = $im->colorAllocate(0,0,0);
my $white = $im->colorAllocate(255,255,255);
$im->rectangle(10,10,90,90,$white);
my $png = $im->png;
return send_file( \$png, content_type => 'image/png', filename => params->{var1}."_".params->{var2}.".png" );
};
ただし、上記のルートにアクセスすると、ChromeとFirefoxは画像データをどう処理するかを認識していないようです。ライトボックスでルートを使用しようとすると、Chromeが文句を言います。たとえば、次のようなリンクをクリックすると、次のようになります。
<a href="/dynamic_image/my/image" rel="lightbox">link</a>
Chromeのコンソールには次のように書かれています。
リソースは画像として解釈されますが、MIMEタイプapplication / octet-streamで転送されます:" http://www.example.com/dynamic_image/my/image "。
Dancerがcontent_typeを正しく使用していないようです。興味深いことに、IE8は画像を問題なくロードしているようです。何が起こっているのか分かりますか?私は現在、StrawberryPerlv5.16.2を搭載したWindows7でスタンドアロンで実行しています。