Laravel 8中图片存入storage文件夹后无法显示求助
问题描述
我已将图片路径保存至MySQL数据库,但在视图中输出图片时无法显示,寻求帮助。
图片保存控制器代码
public function store(Request $request) { // $request->validate([ 'carImage' => 'required|image|mimes:jpeg,png,jpg,gif', ]); $imagePath = $request->file('carImage')->store('public/images'); $image = new Mycar(); $image->description = request('description'); $image->owner = request('owner'); $image->rate_per_day = request('rate'); $image->image = $imagePath; $image->save(); $id = $request->session()->get('id'); return redirect('user/mycars/' . $id)->with('success_mg', 'car uploaded successfully'); }
视图展示图片代码
<div style=" width:60%; margin: 20px auto;"> <div class="text-center mb-2 mt-2"> <img src="{{ asset('storage/'. $posts->image) }}" alt="" style="width: 100%; max-width: none; max-height: 100%; object-fit: cover; border-radius: 10px;"/> </div>
解决方法
创建存储软链接
Laravel的store('public/images')会把文件存在storage/app/public/images目录下,但前端要通过asset('storage/...')访问,必须先建立public/storage到storage/app/public的软链接。在项目根目录执行命令:php artisan storage:link这是最常见的原因,没做这一步的话,前端请求的路径对应不到实际文件位置。
核对路径一致性
- 检查数据库
Mycar表的image字段,确认存储的路径是public/images/xxx.jpg这类格式。 - 确认
storage/app/public/images下确实存在对应文件名的图片文件。
- 检查数据库
检查URL拼接
当前视图里的asset('storage/'. $posts->image)会生成storage/public/images/xxx.jpg这样的URL,在软链接创建后,这个路径会正确映射到storage/app/public/images/xxx.jpg,如果没链接则会指向public/storage/public/images/xxx.jpg,显然没有文件。权限排查
确保storage/app/public目录和软链接后的public/storage目录有服务器可读权限,避免因权限问题导致图片无法加载。
内容的提问来源于stack exchange,提问作者Godwin Addetsi
相关产品推荐
相关产品推荐

