【发布时间】:2013-03-07 00:41:25
【问题描述】:
我有一个使用 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 的控制台说:
资源解释为图像,但使用 MIME 类型 application/octet-stream: "http://www.example.com/dynamic_image/my/image" 传输。
Dancer 似乎没有正确使用 content_type。有趣的是,IE8 似乎可以很好地加载图像。知道发生了什么吗?我目前正在使用 Strawberry Perl v5.16.2 在 Windows 7 上独立运行它。
【问题讨论】: