使用Laravel 5和Blade显示安全图像

时间:2016-08-30 16:50:55

标签: laravel-5 blade laravel-blade

我不希望用户只使用http://laravel.dev/123.jpg之类的网址来访问图片。因此,我将所有图像存储在存储目录中,而不是将它们存储在公用文件夹中。

使用像这样的控制器

public function show($id) {
    $img = storage_path('my_images/123.jpg');
    return response()->download($img, null, [], null);
}

Laravel 5正确显示图像,但它存储在公共文件夹的外部。

很高兴到目前为止......但我想使用Blade并用更多细节环绕图像。因此我的控制器看起来像这样

public function show($id) {
    $picture = Picture::find($id);
    $img = storage_path('my_images/123.jpg');
    return view('pictures.show', array('picture' => $picture, 'img' => $img));
}

视图一样

<!DOCTYPE html>
<html>
    <head>
        <title>Picture {{ $picture->id }}</title>
    </head>
    <body>
        <h1>Picture {{ $picture->id }}</h1>
        <ul>
            <li>Name: {{ $picture->name }}</li>
            <li>Description: {{ $picture->description }}</li>
        </ul>
        <img src="{{ $image }}">
    </body>
</html>

这显然不起作用,因为图像的位置不可公开访问(这是意图)。

我必须使用什么代替<img src="{{ $image }}">才能使其发挥作用?

1 个答案:

答案 0 :(得分:1)

使src属性调用第一个控制器的URL,这对你有用。

换句话说,假设您有一条名为image.show的路线,并带有该代码。

public function show($id) {
    $img = storage_path('my_images/123.jpg');
    return response()->download($img, null, [], null);
}

所以在你的刀片中:

<img src={{route("image.show",$img_object)}}">