所以问题是:
- 这是使用 Catalyst 框架的报告应用程序
- 在控制器中,我生成 QR 码图像并希望将此 URL(生成的图像)传递给特定的视图/前端?注意:我不想将二进制或 base64 数据从控制器传递给查看?
- 我应该在 $c->stash->{Images} = ??
任何想法,提示?请指导...
所以问题是:
任何想法,提示?请指导...
就个人而言,我完全绕过了 View,并设置了 content-type 和 body 以在这种情况下直接从控制器返回图像。将图像写入文件,以便对服务器的另一个调用可以检索它似乎既不明智也不可扩展。最终,除非您正在做一些非常非正统的事情,否则您<img src="..."/>
无论如何都会从页面请求图像。
package SomeController;
...
sub qrcode :Local {
my ($self, $c, @args) = @_;
my $png;
eval { $png = ... } } ||
$c->res->redirect($c->uri_for('/static/images/sorry_qrcode_failed.png'));
$c->res->content_type('image/png');
$c->res->body($png);
}
...以及您的页面请求
<img src="/somecontroller/qrcode/foo/bar" />
希望有帮助。
注意:我不想将二进制或 base64 数据从控制器传递给查看?
这是一个问题还是一个陈述,我不确定。我会将生成 QR 的信息传递给视图,视图将生成实际图像。
如果您不想通过 View 生成 QR,也不想传递任何二进制数据,那么只剩下 1 个选项:URL(http 或文件)。
我建议您使用 QRCode View for Catalyst:
这样,二维码图像将自动从数据中生成,无需将图像存储在您的服务器上,占用空间。这就是我实际上所做的,它非常方便:)