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

Laravel问题:使用Storage::url()无法显示图片

解决Laravel存储图片无法访问的404问题

核心原因

Laravel的Storage::put('ranker', ...)默认使用local磁盘,文件会存在storage/app/ranker目录下,但这个目录不直接对外提供Web访问。Storage::url()生成的/storage/...路径,实际指向的是public/storage目录(而非storage/app),因此需要通过软链接打通存储目录与Web访问目录的关联,或调整磁盘配置。

解决步骤

1. 创建默认存储软链接(最常用方案)

在项目根目录执行Laravel提供的Artisan命令,快速创建软链接:

php artisan storage:link

执行成功后,public/storage会成为storage/app/public的软链接,Web请求/storage/xxx会自动映射到storage/app/public/xxx。

接下来调整上传代码,将文件上传到public磁盘的ranker目录:

if ($request->file('file')) {
  // 改用public磁盘上传,文件会存到storage/app/public/ranker
  $filename = Storage::disk('public')->put('ranker', $request->file('file'));
  $ranker->image_url = $filename;
  $ranker->save();
}

视图中保持原有写法即可:

<img src="{{ Storage::url($ranker->image_url) }}" ... >

此时生成的/storage/ranker/xxx.png就能正常访问。

2. 迁移已上传文件(可选)

如果已有大量文件存在storage/app/ranker,可手动将这些文件移动到storage/app/public/ranker目录,再执行上述软链接命令,后续新文件按步骤1的方式上传即可。

3. 自定义磁盘配置(进阶)

若不想使用默认public磁盘,可在config/filesystems.php中添加自定义磁盘:

'disks' => [
    // ... 其他磁盘配置
    'ranker' => [
        'driver' => 'local',
        'root' => storage_path('app/ranker'),
        'url' => env('APP_URL').'/ranker',
        'visibility' => 'public',
    ],
],

然后手动在public目录下创建软链接:

ln -s ../storage/app/ranker public/ranker

上传和视图代码调整为:

// 上传时使用自定义磁盘
$filename = Storage::disk('ranker')->putFile('', $request->file('file'));
<img src="{{ Storage::disk('ranker')->url($ranker->image_url) }}" ... >

验证要点

  • 检查软链接是否生效:查看public/storage(或自定义软链接)是否正确指向对应存储目录
  • 确认目录权限:确保storage/app/public和public/storage目录权限为755,文件权限为644

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:40:42