Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何将文件从控制器返回到视图?_Html_Perl_Mojolicious - Fatal编程技术网

Html 如何将文件从控制器返回到视图?

Html 如何将文件从控制器返回到视图?,html,perl,mojolicious,Html,Perl,Mojolicious,我试图从控制器返回一个文件到视图(更具体的是.jpeg),而不是路径,因为我不想被看到 这是我目前的代码: sub get_avatar { my $self = shift; my $username = $self->stash('id'); my $home = Mojo::Home->new; $home->detect('SuperSecret'); my $path = $home->child('my', 'path'

我试图从控制器返回一个文件到视图(更具体的是.jpeg),而不是路径,因为我不想被看到

这是我目前的代码:

sub get_avatar {
    my $self = shift;
    my $username = $self->stash('id');
    my $home = Mojo::Home->new;
    $home->detect('SuperSecret');
    my $path = $home->child('my', 'path', "$username");
    my $file;
    if (-e $path) {
    $file = "my/path/$username";
    } else {
    $file = "my/path/default.png";
    }
    return $file;
}

可以对图像进行编码,将其作为数据URL传递,而不是链接到文件。请参见下面一个简单的图像编码应用程序示例

#!/usr/bin/env perl
use Mojolicious::Lite;
use English;
use MIME::Base64;

my $filename = "acorn_PNG37023.png";
## read file as binary data
open( my $png_fh, '<:raw', $filename ) or die "$OS_ERROR";
read $png_fh, my $png_bin_data, -s $png_fh;
close($png_fh);

my $encoded = MIME::Base64::encode($png_bin_data);

get '/' => { 
    text => '<img src="data:image/png;base64,' . $encoded . '" alt="png" />'  
};

app->start;
#/usr/bin/env perl
使用mojolicous::Lite;
使用英语;
使用MIME::Base64;
my$filename=“acorn\u PNG37023.png”;
##将文件作为二进制数据读取

open(my$png_fh,'您提供的图像应该位于web服务器可以访问的位置(而不是实际应用程序)。这就是public的含义。如果您不想让图像易于识别,请将它们重命名为UUID或其他随机字符串,甚至是其内容的md5或类似散列,然后使用它。另一种方法是读取文件并在模板中包含内联图像,但这会破坏用户的浏览器缓存。有机会重新使用从后端注册文件?因此我的变量$file将是文件而不是路径。这是关于对未经身份验证的客户端隐藏图像吗?如果是这样,请为
src=
属性使用经过身份验证的路由,并与
Mojo::Asset::file
一起使用。