laravel图片不显示90%因public/storage软链接未建好或失效;需在laragon终端进入项目根目录,用ls -la public/storage验证链接指向../storage/app/public,否则执行del /f /q public\storage、php artisan optimize:clear、php artisan storage:link重建,并确保blade中使用asset('storage/...')或storage::url()。

在 Laragon 环境下,Laravel 图片不显示,90% 是因为 public/storage 软链接没建好或已失效。Laragon 本身不自动创建该链接,即使你运行过 php artisan storage:link,也可能因权限、路径缓存或 Windows 符号链接限制而失败——尤其在重装项目、切换 PHP 版本或从其他环境复制代码后。
确认 public/storage 是否真实有效
别只看命令输出“link has been connected”,要亲手验证:
- 打开 Laragon 的终端(右键菜单 → Terminal),确保在项目根目录(含
artisan文件的位置) - 执行:
ls -la public/storage(Windows 可用 Git Bash 或 WSL;CMD/PowerShell 默认不支持 symlink,容易静默失败) - 正确输出应类似:
public/storage -> ../storage/app/public - 如果显示
No such file or directory、指向错误路径、或只是个空文件夹,说明链接损坏或未创建
强制重建软链接(Laragon 推荐流程)
Laragon 使用 Windows 系统,对符号链接较敏感。推荐以下三步走:
-
删干净旧链接:在项目根目录运行
del /f /q public\storage(CMD)或rm -f public/storage(Git Bash) -
清空所有缓存:运行
php artisan optimize:clear(Laravel 8+ 必须,避免 config/route/view 缓存干扰 URL 生成) -
重新链接:再次运行
php artisan storage:link;成功时会明确提示The [public/storage] link has been connected to [storage/app/public].
检查图片实际存放位置与访问路径是否匹配
常见脱节情况:
- 文件确实存在
storage/app/public/images/avatar.jpg,但你在 Blade 中写的是<img src="%7B%7B%20asset('images/avatar.jpg')%20%7D%7D">—— 错!asset()指向public/下的文件,不是storage - 正确写法是:
<img src="%7B%7B%20asset('storage/images/avatar.jpg')%20%7D%7D">(因为public/storage链向storage/app/public) - 或者用 Laravel 存储门面:
{{ Storage::url('images/avatar.jpg') }}(前提是 disk 配置为'public',且APP_URL设置合理) - 若部署在子目录(如
http://localhost/myapp),请确认.env中APP_URL=http://localhost/myapp,否则Storage::url()生成的绝对路径可能错位
补充:Laragon 下的权限与服务注意点
Laragon 默认用 Apache,一般无需额外配置;但需留意:
- 确保
storage/app/public/及其子目录有读取权限(右键文件夹 → 属性 → 安全 → 给IIS_IUSRS或Users添加“读取”权限) - Apache 配置中未禁用
FollowSymLinks(Laragon 默认开启,无需改;如手动改过 httpd.conf,请确认Options FollowSymLinks存在) - 浏览器直接访问
http://localhost/storage/images/avatar.jpg测试,绕过 PHP 和 Blade,能打开说明链接和路径完全 OK











