Laravel 5.4上传图片无法显示问题求助
看起来你已经完成了大部分正确的配置,但问题出在图片URL的生成方式上,导致请求路径错误引发404。下面一步步帮你排查和解决:
核心问题分析
你的public磁盘配置里已经指定了url为env('APP_URL').'/storage',这意味着所有存储在public磁盘的文件,访问路径应该以/storage开头。但你当前的图片src是http://tddforum.com/avatars/Aew15JlTZAIrldYR6gXyFJ0lriK4p1vhVNim5oBo.jpeg——缺少了/storage前缀,服务器会去项目根目录的public/avatars文件夹找文件,但这个文件夹并不存在,自然返回404。
解决方案
1. 使用Laravel内置方法生成正确的图片URL
不要手动拼接图片路径,改用Storage::disk('public')->url()方法来生成符合配置的URL。修改你的控制器代码:
// AvatarController.php $new_file_name = Storage::disk('public')->putFile('avatars',$request->file('avatar')); // 生成正确的访问URL $imageUrl = Storage::disk('public')->url($new_file_name); // 将$imageUrl传递给视图 return view('your-view-name', compact('imageUrl'));
然后在视图中使用这个生成好的URL:
<img src="{{ $imageUrl }}" alt="johnDoe" width="100" height="100">
这样生成的src会自动带上/storage前缀,变成http://tddforum.com/storage/avatars/Aew15JlTZAIrldYR6gXyFJ0lriK4p1vhVNim5oBo.jpeg,就能通过符号链接正确访问到storage/app/public/avatars里的文件了。
2. 再次确认符号链接的正确性
虽然你说已经创建了符号链接,但可以重新执行Laravel的官方命令确保链接正确:
php artisan storage:link
执行后,检查项目根目录的public/storage是否确实是指向storage/app/public的符号链接(Linux/macOS可以用ls -l public/storage查看,Windows可以右键查看快捷方式目标)。
3. 验证.env中的APP_URL配置
确保.env文件里的APP_URL和你实际访问的域名完全一致:
APP_URL=http://tddforum.com
如果URL不一致,生成的图片路径也会出错。
额外检查
- 确认
storage/app/public/avatars下的文件权限正确(通常设置为644,文件夹权限755),避免因权限问题导致无法访问。 - 清除浏览器缓存后再测试,有时候旧的缓存会导致路径不生效。
内容的提问来源于stack exchange,提问作者Yeasir Arafat Majumder

