Laravel 7-无法正确获取存储映像路径

时间:2020-04-02 06:25:44

标签: laravel laravel-storage

我无法使用资产获取正确的图像URL以在视图中显示。生成的URL需要storage,当我使用asset函数时,URL丢失了,我必须在storage

之类的路径中手动添加asset('storage/' . $post->image)

我不明白为什么Laravel不会自动添加storage

符号链接存储

我使用以下命令创建了存储文件夹的符号链接

php artisan storage:link

问题:
我正在寻找的是storage文件夹,它应该动态添加到路径中,因此我只需要传递$post->image

控制器

public function store(PostRequest $request)
{
    // upload the image to storage
    $image = $request->image->store('posts', 'public');

    // create the post
    Post::create([
        'title'       => $request->title,
        'description' => $request->description,
        'content'     => $request->content,
        'image'       => $image,
    ]);

    // redirect with flash message
    return redirect(route('posts.index'))->with('success', 'Post is created');

}

DB image列存储路径

posts/ibexiCvUvbPKxzOLSMHQKPpDq7eZXrFA0stBoPfw.jpeg

查看

<tbody>
@foreach($posts as $post)
    <tr>
        <td>
            <img src="{{asset($post->image)}}"  width="60" height="60" alt="">
        </td>
        <td>{{ $post->title }}</td>
    </tr>
@endforeach
</tbody>

存储路径

enter image description here

HTML来源

enter image description here

如您在上述参考资料中所见,要获取正确的URL,我必须将storage添加到asset('storage/'. $post->image)

2 个答案:

答案 0 :(得分:4)

使用Storage::url()函数

<tbody>
@foreach($posts as $post)
    <tr>
        <td>
            <img src="{{ Storage::url($post->image)}}"  width="60" height="60" alt="">
        </td>
        <td>{{ $post->title }}</td>
    </tr>
@endforeach
</tbody>

参考链接https://laravel.com/docs/7.x/filesystem#file-urls

答案 1 :(得分:0)

另一种有用的方法是在.env文件中使用ASSET_URL,例如:

APP_URL=http://localhost:8000
ASSET_URL = http://localhost:8000/storage

我在APP_URL上附加了“存储”以更改资产助手功能的默认补丁,然后您可以在视图中使用资产功能,例如:

 <img src="{{asset($post->image)}}"  width="60" height="60" alt="">

我希望这种方式可以为您提供帮助。