
当 Laravel 项目重建后,原通过 storage:link 创建的符号链接可能失效,导致 storage/app/public/ 下的图片无法通过 asset() 正确访问;需清除缓存并重新建立软链接才能恢复图片显示。
当 laravel 项目重建后,原通过 `storage:link` 创建的符号链接可能失效,导致 `storage/app/public/` 下的图片无法通过 `asset()` 正确访问;需清除缓存并重新建立软链接才能恢复图片显示。
在 Laravel 中,用户上传的图片通常保存在 storage/app/public/ 目录下,并通过 php artisan storage:link 命令在 public/storage 处创建指向该目录的符号链接,从而支持 Web 访问。你当前使用的代码逻辑本身是正确的:
->editColumn('image_path', function ($submission) {
$imgUrl = asset('storage' . str_replace('public', '', $submission->image_path));
return "@@##@@";
})
但关键问题在于:项目文件夹被删除重置后,public/storage 这个符号链接虽存在,却可能已损坏或指向错误路径(如残留旧项目的绝对路径),或因 Laravel 缓存(如配置、路由、视图编译)未更新,导致 asset() 生成的 URL 不准确。
✅ 正确解决步骤如下:
-
手动删除旧链接
进入项目根目录,执行:rm public/storage
⚠️ 注意:确保你删除的是 public/storage 符号链接(而非 storage/ 目录本身),可用 ls -la public/ 确认其类型。
-
清理所有 Laravel 缓存
执行完整缓存清理,避免优化类缓存干扰链接解析:php artisan optimize:clear
该命令等价于依次运行:config:clear, cache:clear, route:clear, view:clear, event:clear, bootstrap:clear。
-
重建存储链接
php artisan storage:link
成功时终端将输出:
The [public/storage] link has been connected to [storage/app/public].
验证链接有效性
在浏览器中直接访问类似 http://your-app.test/storage/your-image.jpg 的 URL(路径需与 $submission->image_path 实际值匹配,例如若值为 public/uploads/product.jpg,则访问 storage/uploads/product.jpg),确认图片可正常加载。
? 补充建议:
- 确保 $submission->image_path 存储的是相对路径(如 public/uploads/abc.png),且始终以 public/ 开头,这样 str_replace('public', '', ...) 才能安全剥离前缀;
- 更健壮的写法可改用 Laravel 内置辅助函数避免硬编码:
$path = Str::after($submission->image_path, 'public/'); $imgUrl = Storage::url($path); // ✅ 推荐:自动适配 disk 配置,无需手动拼接
(前提:image_path 字段仅存 uploads/xxx.jpg 等相对路径,且 config/filesystems.php 中 public disk 的 root 指向 storage_path('app/public'))
完成以上操作后,Datatables 或 Blade 模板中调用 asset('storage/...') 即可正确渲染图片。











