Laravel执行storage:link后上传的公共存储图片前端无法显示如何解决
Laravel公共存储图片无法显示排查方案
按照优先级逐一排查以下配置遗漏项:
1. 验证软链接有效性
虽然执行php artisan storage:link提示链接已存在,但大概率是旧软链接指向错误:
- 执行命令检查软链接指向:
ls -l /var/www/awendo/public/storage - 正常指向应为
/var/www/awendo/storage/app/public,如果指向错误,先删除旧软链接:rm /var/www/awendo/public/storage - 重新在项目根目录(/var/www/awendo)下执行:
php artisan storage:link
2. 检查目录与文件权限
web服务器运行用户(通常为www-data、nginx、apache)无文件读取权限是高频问题:
- 给项目目录设置正确归属:
chown -R www-data:www-data /var/www/awendo(将www-data替换为你实际的web运行用户) - 给存储目录设置可读权限:
chmod -R 755 /var/www/awendo/storage
3. 核对存储配置
- 查看
config/filesystems.php中public磁盘配置是否和默认一致:
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ]
- 核对
.env文件中的APP_URL参数,必须和你实际访问站点的域名/IP完全一致,否则asset()函数会生成错误的访问路径
4. 补全上传文件公共可见性配置
你当前的上传代码未指定文件可见性,部分环境会默认生成私有权限的文件,导致web服务无法读取,修改上传代码:
// 第三个参数指定public磁盘的可见性 $this->image->storeAs("public/photos/category/", $slug, 'public');
5. 验证web服务规则
直接在浏览器地址栏输入图片的完整访问地址,根据状态码排查:
- 返回404:路径拼写错误/软链接失效,检查
$imageurl传递的值是否和存储的slug完全一致 - 返回403:权限配置错误,回到第二步排查权限
内容的提问来源于stack exchange,提问作者Puneet Sharma
相关产品推荐
相关产品推荐

