我有一个使用 GD 动态创建图像的 Perl Dancer Web 应用程序。我正在尝试将这些图像以 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 似乎不知道如何处理图像数据。如果我尝试在 Lightbox 中使用该路由,Chrome 会抱怨。例如,当单击这样的链接时:
<a href="/dynamic_image/my/image" rel="lightbox">link</a>
Chrome 的控制台说:
资源被解释为 Image 但使用 MIME 类型 application/octet-stream: " http://www.example.com/dynamic_image/my/image "传输。
看起来 Dancer 没有正确使用 content_type。有趣的是,IE8 似乎可以很好地加载图像。知道发生了什么吗?我目前正在使用 Strawberry Perl v5.16.2 在 Windows 7 上独立运行它。