在 mojolicious 中,如何保护图像不被 public 查看
In mojolicious, how to protect images from public view
有人可以帮助我,拜托。我在 mojolicious Lite 中有应用
我想阻止所有没有会话登录的图像
当我输入 http://m.y.i.p:3000/images/imageX.jpg
我只想在会话登录时显示图像。
我的html代码是
<a href="images/imagex.jpg">shwo image 1 </a>
与任何其他内容相同。为请求设置处理程序,呈现(或不呈现)内容。
get '/images/*img' => sub {
my $c = shift;
if (!$c->session("is_authenticated")) {
return $c->render( text => "Forbidden", status => 403 );
}
my $file = $c->param("img");
if (!open(my $fh, '<', $IMAGE_DIR/$file)) {
return $c->render( text => "Not found", status => 404 );
}
my $data = do { local $/; <$fh> };
close $fh;
$c->render( data => $data, format => 'jpg' );
};
您的请求处理程序将优先于为 public 文件夹中的内容提供服务的默认处理程序,但是一旦您拥有此处理程序,您就不需要将其提供的文件存储在 public文件夹。
另一个解决方案是
get '/pays/*img' => sub {
my $self = shift;
my $img = $self->param('img');
plugin 'RenderFile';
my @imgext = split(/\./, $img);
my $ext = $imgext[-1];
$self->render_file(
'filepath' => "/directiry/$img",
'format' => "$ext", # will change Content-Type "application/x-download" to "application/pdf"
'content_disposition' => 'inline', # will change Content-Disposition from "attachment" to "inline"
# delete file after completed
);
使用插件'RenderFile';
有人可以帮助我,拜托。我在 mojolicious Lite 中有应用
我想阻止所有没有会话登录的图像
当我输入 http://m.y.i.p:3000/images/imageX.jpg
我只想在会话登录时显示图像。
我的html代码是
<a href="images/imagex.jpg">shwo image 1 </a>
与任何其他内容相同。为请求设置处理程序,呈现(或不呈现)内容。
get '/images/*img' => sub {
my $c = shift;
if (!$c->session("is_authenticated")) {
return $c->render( text => "Forbidden", status => 403 );
}
my $file = $c->param("img");
if (!open(my $fh, '<', $IMAGE_DIR/$file)) {
return $c->render( text => "Not found", status => 404 );
}
my $data = do { local $/; <$fh> };
close $fh;
$c->render( data => $data, format => 'jpg' );
};
您的请求处理程序将优先于为 public 文件夹中的内容提供服务的默认处理程序,但是一旦您拥有此处理程序,您就不需要将其提供的文件存储在 public文件夹。
另一个解决方案是
get '/pays/*img' => sub {
my $self = shift;
my $img = $self->param('img');
plugin 'RenderFile';
my @imgext = split(/\./, $img);
my $ext = $imgext[-1];
$self->render_file(
'filepath' => "/directiry/$img",
'format' => "$ext", # will change Content-Type "application/x-download" to "application/pdf"
'content_disposition' => 'inline', # will change Content-Disposition from "attachment" to "inline"
# delete file after completed
);
使用插件'RenderFile';