Laravel 10生产环境图片无法显示问题求助
Laravel生产环境图片上传后无法显示问题排查与解决
核心问题:软链接创建方式错误
你通过路由创建软链接的方式存在权限和可靠性问题,Laravel官方推荐用命令行创建软链接,这是生产环境的标准做法:
- 登录生产服务器的SSH终端
- 进入项目根目录,执行命令:
php artisan storage:link
执行后检查项目public目录下是否生成storage软链接,指向storage/app/public目录。
你的路由创建方式可能失败的原因:
- 服务器PHP配置禁用了
symlink函数 - Web服务器用户(如
www-data)没有创建软链接的权限 $_SERVER['DOCUMENT_ROOT']路径可能和实际项目public目录不符
优化上传代码,避免硬编码路径
你的上传代码可以简化,同时避免硬写存储路径,提升兼容性:
if ($request->hasFile('foto')) { $file = $request->file('foto'); $nama = 'foto-' . date('YmdHis') . '.' . $file->getClientOriginalExtension(); // 用Laravel内置方法存储,更高效可靠 $file->storeAs('img', $nama, 'public'); // 用Storage::url()自动生成正确的访问URL,适配配置 $user->foto = Storage::url("img/$nama"); }
检查目录权限
生产环境中,存储目录的权限配置错误会导致图片无法读取:
- 设置
storage目录的所有者为Web服务器用户(以www-data为例):
chown -R www-data:www-data storage
- 设置目录和文件权限:
chmod -R 755 storage chmod -R 644 storage/app/public/img
验证步骤
- 上传图片后,检查
storage/app/public/img目录下是否存在对应的图片文件 - 直接访问图片的完整URL(如
https://你的域名/storage/img/xxx.jpg),确认是否能正常显示 - 检查服务器是否正确指向Laravel的
public目录作为网站根目录,确保rewrite规则正常
内容的提问来源于stack exchange,提问作者Edy Susilo
相关产品推荐
相关产品推荐

