Laravel 8 使用spatie media library上传成功后图片无法显示如何解决
解决方案
下面是按优先级排序的修复步骤:
1. 修正模型保存与媒体添加的顺序(核心错误)
Spatie Media Library 要求关联媒体的模型必须先写入数据库、生成主键ID后,才能完成媒体关联。你当前代码先执行媒体添加、后保存模型,导致关联关系异常。
修改store方法代码如下:
public function store(Request $request) { $categories = new ProductCategories(); $categories->name = $request->name; $categories->slug = $request->slug; $categories->description = $request->description; // 先保存模型,生成主键ID $categories->save(); if($request->hasFile('photo') && $request->file('photo')->isValid()){ $categories->addMediaFromRequest('photo')->toMediaCollection('category'); } $request->session()->flash('message', 'Successfully created category'); return redirect()->back(); }
2. 清理无效配置与缓存
- 你自定义了
public磁盘的根路径为public_path('images/media'),媒体文件本身就存放在站点公开可访问目录下,不需要php artisan storage:link生成的软链接,可以手动删除public/storage软链接避免路径冲突。 - 执行命令清理配置缓存,确保修改的配置生效:
php artisan config:clear
3. 校验.env配置
确认.env文件中APP_URL参数和你实际访问站点的前缀完全一致,比如本地测试时如果访问地址是http://localhost/butingting,就要配置为:
APP_URL=http://localhost/butingting
验证方法
修改完成后重新上传新的图片,访问$list->getFirstMediaUrl('category')输出的链接,若直接在浏览器地址栏可打开图片,则修复完成。之前上传的异常媒体数据和文件可直接删除后重新上传。
内容的提问来源于stack exchange,提问作者SleepWalker
相关产品推荐
相关产品推荐

