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最佳实践(推荐)
- 修正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, ],
- 重新创建符号链接:如果之前的符号链接存在,先删除
public/storage,再重新执行命令:
rm public/storage php artisan storage:link
- 迁移现有文件:将
storage/uploads下的所有文件移动到storage/app/public/uploads目录,确保文件位置与配置一致。 - 修正前端URL:把
<img>标签的src改为http://localhost/storage/uploads/18-4f2d6e8f609942df5f746775345a9430/man.png,去掉多余的/public/。
方法二:直接存储到public目录(不推荐)
如果不想使用storage/app/public目录,可直接将文件存在public/uploads:
- 修正filesystems配置:
'public' => [ 'driver' => 'local', 'root' => public_path('uploads'), 'url' => env('APP_URL') . '/uploads', 'visibility' => 'public', 'throw' => false, ],
- 修正前端URL:将
<img>标签的src改为http://localhost/uploads/18-4f2d6e8f609942df5f746775345a9430/man.png,移除/public/前缀。 - 无需符号链接:因为文件直接存放在Web可访问的
public目录下,不需要执行storage:link命令。
内容的提问来源于stack exchange,提问作者WPdev11
相关产品推荐
相关产品推荐

