Catalyst控制器生成动态图像并将其传递给视图/前端 - 最好的方法是什么?

时间:2012-07-31 17:25:49

标签: catalyst

所以问题是:

  1. 这是报告使用Catalyst框架的应用程序
  2. 在控制器中,我生成QR码图像并希望传递此URL(生成的图像) 到特定视图/前端?注意:我不想传递二进制或base64数据 控制器来查看?
  3. 我应该藏在$ c-> stash-> {Images} = ????
  4. 任何想法,提示?请指导......

3 个答案:

答案 0 :(得分:1)

就个人而言,我完全绕过了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" />

希望有所帮助。

答案 1 :(得分:0)

  

注意:我不想从控制器传递二进制或base64数据到视图?

这是一个问题还是一个陈述,我不确定。我会传递信息以生成QR到视图,视图将生成实际图像。

如果您不想通过View生成QR,也不想传递任何二进制数据,那么只剩下一个选项:URL(http或文件)。

答案 2 :(得分:0)

我建议您使用QRCode View for Catalyst:

  

Catalyst::View::GD::Barcode::QRcode

这样,QRCode图像将自动从数据生成,并且不需要在服务器上存储任何图像,占用空间。 这就是我实际做的事情,非常方便:)