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

Laravel中如何访问Storage/App目录文件?访问异常求助

解决Laravel存储文件无法访问的问题

问题根源

你现在碰到的核心问题是Laravel的storage/app/目录默认不对外网开放,web服务器的可访问根目录是项目里的public/文件夹,所以直接访问storage/app/下的文件必然失败。另外你用Storage::url()生成的路径,默认对应storage/app/public/目录(这个目录需要通过软链接映射到public/storage),但你上传的文件存在storage/app/根目录,导致路径完全不匹配。

解决方案(推荐符合Laravel最佳实践的方式)

1. 调整上传代码,将文件存入storage/app/public/目录

修改你的上传逻辑,指定使用public磁盘(默认对应storage/app/public/路径):

$file = $request->file('cover_image');
$fileName = time().rand(111, 9999).".".$file->getClientOriginalExtension();
// 改用public磁盘存储,文件会被放到storage/app/public/下
Storage::disk('public')->put($fileName, file_get_contents($file));

2. 创建public/storage到storage/app/public的软链接

在项目根目录执行Artisan命令,建立软链接让web服务器能访问到storage/app/public/下的文件:

php artisan storage:link

3. 修改Blade中的图片链接代码

现在Storage::url()可以正确生成对应public/storage/的路径,Blade代码可以简化为:

<img src="{{ Storage::url($article->coverImage) }}" alt="image">

生成的链接会是http://127.0.0.1:8000/storage/15573877669649.jpg,此时就能正常访问图片了。

若必须将文件存在storage/app/根目录(不推荐)

如果因为特殊需求要把文件存在storage/app/,可以通过以下方式处理:

  • 自定义磁盘配置:在config/filesystems.php中添加一个磁盘,指定根目录为storage/app/并配置访问路径,再创建对应软链接;
  • 写路由处理访问:创建一个路由来读取storage/app/下的文件并返回响应,但这种方式效率低于软链接,也不符合最佳实践。

举个自定义磁盘的配置示例(修改config/filesystems.php):

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

之后需要将public/storage-app软链接到storage/app/,不过还是优先推荐前面的最佳实践方案,更简洁安全。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:30:53