使用 Laravel 5 和 Blade 显示受保护的图像
Show secured images with Laravel 5 and Blade
我不希望用户可以通过简单地使用 URL(例如 http://laravel.dev/123.jpg)来访问图像。因此,我将所有图像存储在 存储目录 中,而不是将它们存储在 public 文件夹中。
有了这样的控制器
public function show($id) {
$img = storage_path('my_images/123.jpg');
return response()->download($img, null, [], null);
}
虽然图像存储在 public 文件夹之外,但 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>
这显然是行不通的,因为图片的位置 public 无法访问(这是本意)。
我必须使用什么来代替 <img src="{{ $image }}">
来完成这项工作?
使 src 属性调用第一个控制器的 URL,这对你有用。
换句话说,假设您有一条名为 image.show
的路线,其中包含该代码。
public function show($id) {
$img = storage_path('my_images/123.jpg');
return response()->download($img, null, [], null);
}
所以在你的 blade:
<img src={{route("image.show",$img_object)}}">
我不希望用户可以通过简单地使用 URL(例如 http://laravel.dev/123.jpg)来访问图像。因此,我将所有图像存储在 存储目录 中,而不是将它们存储在 public 文件夹中。
有了这样的控制器
public function show($id) {
$img = storage_path('my_images/123.jpg');
return response()->download($img, null, [], null);
}
虽然图像存储在 public 文件夹之外,但 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>
这显然是行不通的,因为图片的位置 public 无法访问(这是本意)。
我必须使用什么来代替 <img src="{{ $image }}">
来完成这项工作?
使 src 属性调用第一个控制器的 URL,这对你有用。
换句话说,假设您有一条名为 image.show
的路线,其中包含该代码。
public function show($id) {
$img = storage_path('my_images/123.jpg');
return response()->download($img, null, [], null);
}
所以在你的 blade:
<img src={{route("image.show",$img_object)}}">