我不希望用户只使用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 }}">
才能使其发挥作用?
答案 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)}}">