Laravel无法加载storage存储的图片 控制台报404资源不存在错误
你的404错误是因为存储在数据库的文件路径和实际可访问的Web路径不匹配导致的。Laravel执行php artisan storage:link后,会将storage/app/public目录映射到Web根目录的public/storage路径,所以存放在storage/app/public/products下的文件,实际Web访问路径应该是/storage/products/xxx,而不是你当前存的/public/products/xxx。
步骤1:调整存储时的路径写入逻辑
修改ProductController的store方法中图片路径保存的代码,将写入数据库的路径调整为可直接访问的Web路径:
foreach ($images as $image) { $newImage = new ProductImage(); $fileName = basename($image); // 存储位置不变,仍然放在storage/app/public/products下 $storagePath = "/public/products/{$product->id}/{$fileName}"; Storage::move($image, $storagePath); // 写入数据库的路径替换前缀,改为Web可访问路径 $newImage->file = str_replace('/public/', '/storage/', $storagePath); $newImage->product_id = $product->id; $newImage->save(); }
步骤2:确认视图调用逻辑无需额外修改
你当前视图中使用asset($image['file'])的逻辑可以保持不变,调整路径后生成的地址会自动匹配实际文件位置。
额外校验项
如果修改后仍有问题,检查以下配置:
- 确认项目
public目录下存在storage软连接,Windows环境下执行php artisan storage:link需要开启管理员权限,否则可能生成无效的快捷方式 - 确认
config/filesystems.php中public磁盘配置为默认值,root指向storage_path('app/public'),url前缀为/storage - 上传后的文件权限设置正确,Web服务进程有读取
storage/app/public目录的权限
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

