You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中图片存在却无法显示,访问出现404错误求助

Laravel媒体文件无法在浏览器显示的问题原因及解决方法

问题原因

  • 存储路径与符号链接不匹配:你的public磁盘配置中root指向storage/uploads,但php artisan storage:link默认创建的是storage/app/public到public/storage的软链接,文件实际存储目录不在符号链接映射的范围内,导致Web服务器无法找到文件。
  • URL路径错误:前端<img>标签的URL包含/public/,而Laravel的public目录是Web服务器的根目录,请求http://localhost/public/uploads/...实际会指向public/public/uploads/...,这个目录不存在,因此返回404。
  • filesystems配置的url参数错误:url配置项拼接了/public/uploads,错误地添加了Web根目录的public前缀,生成的URL自然无法访问到正确文件。

解决方法

方法一:遵循Laravel最佳实践(推荐)

  1. 修正filesystems配置:修改config/filesystems.php的public磁盘配置,让文件存储到storage/app/public子目录,并修正URL前缀:
'public' => [
    'driver' => 'local',
    'root' => storage_path('app/public/uploads'),
    'url' => env('APP_URL') . '/storage/uploads',
    'visibility' => 'public',
    'throw' => false,
],
  1. 重新创建符号链接:如果之前的符号链接存在,先删除public/storage,再重新执行命令:
rm public/storage
php artisan storage:link
  1. 迁移现有文件:将storage/uploads下的所有文件移动到storage/app/public/uploads目录,确保文件位置与配置一致。
  2. 修正前端URL:把<img>标签的src改为http://localhost/storage/uploads/18-4f2d6e8f609942df5f746775345a9430/man.png,去掉多余的/public/。

方法二:直接存储到public目录(不推荐)

如果不想使用storage/app/public目录,可直接将文件存在public/uploads:

  1. 修正filesystems配置:
'public' => [
    'driver' => 'local',
    'root' => public_path('uploads'),
    'url' => env('APP_URL') . '/uploads',
    'visibility' => 'public',
    'throw' => false,
],
  1. 修正前端URL:将<img>标签的src改为http://localhost/uploads/18-4f2d6e8f609942df5f746775345a9430/man.png,移除/public/前缀。
  2. 无需符号链接:因为文件直接存放在Web可访问的public目录下,不需要执行storage:link命令。

内容的提问来源于stack exchange,提问作者WPdev11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:13:18