必须安装适配器包并传入实现adapterinterface的实例,否则filesystem构造失败;v3中localfilesystemadapter需绝对路径,跨存储复制须用mountmanager。

直接装 league/flysystem 不够,必须配适配器才能用;只跑 composer require league/flysystem 会得到一个“不能工作的核心”,连 write() 都抛 TypeError。
为什么装完就报错:Argument 1 passed to Filesystem::__construct() must be an instance of AdapterInterface
这是最典型的“只装了半套”错误。v3 版本里 Filesystem 构造函数**强制要求传入一个实现了 AdapterInterface 的实例**,而 league/flysystem 包本身不带任何具体适配器。
- 你写了
new Filesystem($adapter),但$adapter是 null、是字符串、或根本没初始化 —— 就会触发这个错误 - 常见误操作:漏装适配器包(比如要用本地存储却没装
league/flysystem-local),或用了过时的类名(如LocalAdapter是 v1 的,v3 应该用LocalFilesystemAdapter) - 路径参数必须是绝对路径:
/var/www/storage✅,./storage❌(CLI 下可能侥幸成功,Web 环境因getcwd()不稳定极易失败)
本地存储怎么一步配通(v3 正确写法)
别抄旧教程里的 new Local(...) 或 new Adapter(...),v3 类名和构造逻辑全变了。
- 先装两个包:
composer require league/flysystem+composer require league/flysystem-local - 代码里用这三行就跑得起来:
use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;
$adapter = new LocalFilesystemAdapter('/absolute/path/to/storage');
$filesystem = new Filesystem($adapter);
$filesystem->write('test.txt', 'ok');
注意:LocalFilesystemAdapter 不是 LocalAdapter,也不是 Adapter(后者在 v3 中已不存在)。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
要换 S3 / FTP / OSS 怎么加适配器
不要一次性全装,按需加,避免冲突。每个适配器是独立包,且依赖不同 SDK。
- AWS S3:
composer require league/flysystem-aws-s3-v3,再传AwsS3V3Adapter实例(它要你先建S3Client) - FTP:
composer require league/flysystem-ftp,然后 newFtpAdapter(注意是FtpAdapter,不是FtpFilesystemAdapter) - 阿里云 OSS:
composer require "iidestiny/flysystem-oss:^4",第三方包命名和参数风格和官方不一致,别混用 - 查谁拖了后腿?遇到版本冲突,用
composer why aws/aws-sdk-php查哪个包在拉旧版,比硬删vendor理性得多
跨存储复制文件为什么 copy() 不起作用
$localFs->copy('a.txt', 's3://b.txt') 必然失败——copy() 只支持同个 Filesystem 实例内的路径,不认协议前缀。
真正支持跨源的是 MountManager,它才是 Flysystem 设计的调度中枢:
- 构造时传
['local' => $localAdapter, 's3' => $s3Adapter] - 之后路径写成
local://a.txt和s3://b.txt - 调用
$mountManager->copy('local://a.txt', 's3://b.txt')才有效
Adapter 和 Filesystem 是两层,漏掉任一都跑不起来;MountManager 是第三层,专为多端协同存在——这点最容易被跳过,结果卡在“明明两个 Filesystem 都能单独读写,就是拷不过去”。










