You need to enable JavaScript to run this app. Laravel从数据库设置自定义FTP磁盘凭证后登录失败问题
优惠活动
大模型
产品
解决方案
定价
更多

Laravel从数据库设置自定义FTP磁盘凭证后登录失败问题

问题原因
  • Laravel 文件系统的磁盘实例在第一次调用 Storage::disk('custom-ftp') 后会被缓存到容器中,后续即使修改 Config 配置,重复调用同名称磁盘也会复用之前的旧实例,不会读取新配置。
  • 你现有代码里的配置键名写错了:正确的配置前缀是 filesystems.disks.custom-ftp(disk 是复数形式 disks),错误的键名会导致配置修改根本不生效。
解决方案

方案1:动态创建磁盘实例(更适合多用户不同FTP的场景)

不需要提前在 filesystems.php 中预定义磁盘,直接传入完整配置创建临时磁盘实例,不会被缓存,适合每个用户FTP配置独立的场景:

$user = Auth::user();
$setting = $user->setting;

// 组装完整FTP配置
$ftpConfig = [
    'driver' => 'ftp',
    'host' => 'imn.tra.de',
    'username' => $setting->user_name,
    'password' => $setting->password,
    'port'     => 21,
    'ssl'      => true,
];

// 直接生成磁盘实例使用
$customFtpDisk = Storage::build($ftpConfig);
$customFtpDisk->put($file, $localFile);

如果你使用的是 Laravel 7 及更早版本,没有 Storage::build 方法,可以替换为 $customFtpDisk = app('filesystem')->create($ftpConfig); 实现相同效果。

方案2:修改配置后清除已缓存的磁盘实例

如果你需要保留预定义的 custom-ftp 磁盘配置,修改配置后先清除缓存的实例,再调用磁盘即可读取新配置:

$user = Auth::user();
$setting = $user->setting;

// 注意键名是 disks 复数
Config::set('filesystems.disks.custom-ftp.username', $setting->user_name);
Config::set('filesystems.disks.custom-ftp.password', $setting->password);

// 清除已经缓存的custom-ftp磁盘实例
Storage::forget('custom-ftp');

// 此时调用会用新配置重新初始化磁盘
Storage::disk('custom-ftp')->put($file, $localFile);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:54:03