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

Laravel项目public/storage图片无法访问问题求助

Laravel 图片上传后无法通过public/storage访问的解决方法

问题详情

执行php artisan storage:link创建软链接后,Laravel生成了public/storage目录,但上传图片后文件仅出现在storage/app目录,public/storage中无对应文件,浏览器访问图片返回404错误。

相关代码与操作信息:

  • Controller代码:
Property::create([
    'SittingRoom'=> request()->file('sittingroom')->store('apartments')
]);
  • Blade视图代码:
<img src="{{asset('storage/'.$duplex->SittingRoom)}}">
  • 浏览器访问链接:
    http://127.0.0.1:8000/storage/apartments/HNLDysVUdRG7ZTBkF2qFGk2B2tAKYzYcVImNEWLx.jpg
  • storage:link执行提示:
C:\xampp\htdocs\OPAAM> php artisan storage:link
INFO  The [C:\xampp\htdocs\OPAAM\public\storage] link has been connected to [C:\xampp\htdocs\OPAAM\storage\app/public].

问题原因

默认情况下,store()方法使用local磁盘,该磁盘的根目录是storage/app,而软链接public/storage指向的是storage/app/public目录。上传的文件不在软链接映射的目录内,因此浏览器无法通过storage/xxx路径访问到。

解决方法

方法一:上传时指定public磁盘

修改Controller中的上传代码,在store()方法第二个参数指定使用public磁盘:

Property::create([
    'SittingRoom'=> request()->file('sittingroom')->store('apartments', 'public')
]);

修改后,文件会被存储到storage/app/public/apartments目录,软链接public/storage会自动映射到这个位置,浏览器即可正常访问图片。

方法二:设置默认磁盘为public(可选)

如果希望所有文件上传默认使用public磁盘,可修改config/filesystems.php中的default配置项:

'default' => env('FILESYSTEM_DISK', 'public'),

修改后无需在store()方法中指定磁盘,直接调用store('apartments')即可将文件存储到storage/app/public目录下。

验证

上传新图片后,检查storage/app/public/apartments目录是否存在对应文件,同时通过public/storage/apartments路径(软链接)也能看到该文件,此时浏览器访问原链接即可正常显示图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:42:16