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
相关产品推荐
相关产品推荐

