Laravel Livewire 3:如何将上传文件存入可公开访问的正确目录?
解决Laravel Livewire 3头像上传存储路径问题
核心问题原因
你当前使用的store('avatars')方法默认调用Laravel的local磁盘,对应存储路径为storage/app,所以文件会被存在storage/app/avatars。而要让文件能通过浏览器直接访问,需要将其存储到public磁盘对应的storage/app/public目录下。
解决方案
1. 修改上传代码指定存储磁盘
在调用store()方法时,传入第二个参数明确指定使用public磁盘:
// validation $user->avatar = $this->photo->store('avatars', 'public'); $user->save();
修改后文件会自动存储到storage/app/public/avatars目录,数据库中存储的文件路径格式(avatars/xxx.jpg)保持不变,但存储位置符合访问要求。
2. 确保存储符号链接已创建
如果还未创建public/storage到storage/app/public的符号链接,执行以下Artisan命令:
php artisan storage:link
这个符号链接是浏览器能通过/storage路径访问storage/app/public下文件的必要前提。
3. 优化前端图片引用(可选)
可以使用Laravel官方提供的Storage::url()方法生成图片链接,适配不同存储配置的同时更符合框架规范:
<img src="{{ Storage::url(Auth::user()->avatar) }}">
该方法会自动拼接正确的/storage前缀,生成如/storage/avatars/xxx.jpg的可访问链接。
内容的提问来源于stack exchange,提问作者luisfer
相关产品推荐
相关产品推荐

