ThinkPHP6.1移除了think\facade\Filesystem门面类,需改用think\File类配合move()方法上传,并确保filesystem.php中磁盘root为绝对路径、public/uploads目录存在且可写,同时废弃moveTo()改用move()并校验$file->getError()。

升级ThinkPHP版本后文件上传功能突然失效,说明框架底层类或配置结构已变更,旧代码无法匹配新版本的加载机制和API规范,必须针对性修复类引用、磁盘配置和路径写法。
检查Filesystem门面是否被移除或重构
ThinkPHP 6.1起已移除think\facade\Filesystem门面类,直接调用会报Class not found错误。
方法一:改用think\File类手动处理上传
将原代码中的use think\facade\Filesystem;删除,替换为use think\File;。
立即学习“PHP免费学习笔记(深入)”;
调用$file->move()时必须传入绝对路径,例如$file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'images');。
注意:DS是目录分隔符常量,不可替换成反斜杠\,否则Windows下可能解析失败。
重配filesystem磁盘并验证目录权限
旧版config/filesystem.php中自定义磁盘在6.1中仍可沿用,但需确认三项关键项:
第一步:打开config/filesystem.php,检查disks数组中是否包含'uploads'配置项。
第二步:确认'root'值为绝对路径,例如app()->getRootPath() . 'public/uploads',不能写相对路径如../public/uploads。
第三步:确保public/uploads目录真实存在,且Web服务器进程用户(如www-data)对该目录有写权限——缺少该权限会导致putFile静默失败,无任何报错输出。
这一步操作起来很简单,直接在终端执行mkdir -p public/uploads && chmod -R 755 public/uploads即可。
替换moveTo为move并校验getError
ThinkPHP 6.1废弃了moveTo()方法,统一使用move(),且必须在调用前检查原始错误码。
方法一:在$file->move()之前插入诊断语句
if ($file->getError()) { throw new \Exception('上传失败:' . $file->getError()); }
方法二:用$file->getInfo()['error']获取PHP原生错误码,比框架封装层更可靠。
常见错误码4(UPLOAD_ERR_NO_FILE)说明前端根本没发文件,此时应排查HTML表单是否漏掉enctype="multipart/form-data"属性。



















