gpt4 book ai didi

Perl Dancer send_file 图像问题

转载 作者:行者123 更新时间:2023-12-04 05:08:46 25 4
gpt4 key购买 nike

我有一个 Perl Dancer Web 应用程序,它使用 GD 动态创建图像。我正在尝试将这些图像作为 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 的控制台说:

Resource interpreted as Image but transferred with MIME type application/octet-stream: "http://www.example.com/dynamic_image/my/image".



看起来 Dancer 没有正确使用 content_type。有趣的是,IE8 似乎加载图像就好了。知道发生了什么吗?我目前正在使用 Strawberry Perl v5.16.2 在 Windows 7 上独立运行它。

最佳答案

解释 IE 的不同行为:如果 IE 遇到 Content-Type application/octet-stream ,它将尝试扫描文件以确定更具体的 MIME 类型。该行为涵盖更多 here .

我建议使用 Perl 的 LWP 发行版中的 GET` 命令行工具来确认发生了什么。你可以试试这个:

GET -sSe http://www.example.com/dynamic_image/my/image | less

结果应该包括 Content-Type标题。听起来你会发现它说 application/octet-stream .这开始看起来像是 Dancer 的问题。

您没有指定您使用的是哪个版本的 Dancer。 Older versions did not support the content_type option to send_file() .如果您正在阅读有关 CPAN 的最新文档并希望它们适用于旧版本,则可能会有些困惑。

关于Perl Dancer send_file 图像问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15165545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com