You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel图片无法加载求助:自定义软链接配置后仍无效

让我帮你排查下这个图片无法显示的问题,我遇过不少类似的场景,咱们一步步来拆解:

1. 先检查视图里的图片路径是否写错了

你当前的视图代码是:

<img src="/public/storage/{{$main->image_dir}}" />

但Laravel的public目录本身就是网站的根目录,所以不需要在路径里加/public。正确的路径应该是:

<img src="/storage/{{$main->image_dir}}" />

或者更推荐用Laravel的辅助函数生成可靠路径:

<!-- 用asset辅助函数 -->
<img src="{{ asset('storage/' . $main->image_dir) }}" />

<!-- 或者用Storage门面的url方法 -->
<img src="{{ Storage::url($main->image_dir) }}" />

你之前写的/public/storage/...会指向网站根目录下的public/storage(相当于example.com/public/storage/...),但实际软链是直接挂在public目录下的storage,所以这个多余的/public是最可能导致图片404的原因。

2. 确认软链接是否真的创建成功

虽然你在AppServiceProvider里加了创建软链的代码,但可能因为缓存或者代码位置不对,导致代码没执行:

  • 首先确认代码是否放在boot()方法里(服务提供者的boot方法才是在服务注册完成后执行的,register方法不适合做这个):
    public function boot()
    {
        // 加个判断,避免重复创建报错
        if (!file_exists(public_path('storage'))) {
            App::make('files')->link(storage_path('app/public'), public_path('storage'));
        }
    }
    
  • 然后清除所有Laravel缓存,确保服务提供者代码生效:
    php artisan optimize:clear
    
  • 最后检查服务器上的public/storage目录:用ls -l public/命令查看,正常情况下storage应该是指向../storage/app/public的软链;本地环境可以看文件夹图标(比如Mac上是带箭头的快捷方式)。
3. 检查文件和目录权限

即使软链正确,权限不足也会导致图片无法访问:

  • 给storage/app/public目录设置可读权限:
    chmod -R 755 storage/app/public
    
  • 给目录里的图片文件设置可读权限:
    chmod -R 644 storage/app/public/*
    
  • 如果是Linux服务器,还要确保Web服务用户(比如www-data)拥有访问权限:
    chown -R www-data:www-data storage/app/public
    
4. 验证文件系统配置

确认config/filesystems.php里的public磁盘配置正确:

'public' => [
    'driver' => 'local',
    'root' => storage_path('app/public'),
    'url' => env('APP_URL').'/storage',
    'visibility' => 'public',
],

这里的url配置要和你的网站域名对应,这样Storage::url()生成的路径才会正确。

内容的提问来源于stack exchange,提问作者Hodor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:24:08