ThinkFilesystem扩展是ThinkPHP处理文件操作的统一接口,支持上传、读取、删除、元数据获取等功能;需通过Composer安装并配置filesystem.php,上传可用putFile或putFileAs指定路径与文件名,读取用get,获取大小和时间戳用getSize与getTimestamp,删除用delete,重命名用rename。

如果您在ThinkPHP项目中需要处理文件的上传、读取、删除或元数据获取等操作,则必须依赖ThinkFilesystem扩展提供的统一接口。以下是实现各类文件处理功能的具体方法:
一、安装与基础配置
ThinkFilesystem扩展是ThinkPHP官方维护的文件系统抽象层,基于Flysystem封装,支持本地、云存储等多种驱动。安装后需确保config/filesystem.php配置文件已生成并正确加载。
1、在项目根目录执行Composer命令安装扩展:composer require topthink/think-filesystem
2、安装完成后执行自动加载优化命令,确保新类可被识别:php think optimize:autoload
立即学习“PHP免费学习笔记(深入)”;
3、检查config/filesystem.php是否存在;若缺失,手动运行命令发布配置:php think vendor:publish --tag=think-filesystem
二、上传单个文件到public磁盘
public磁盘默认指向public/storage目录,其文件可通过URL直接访问,适用于头像、商品图等公开资源。
1、在控制器中获取上传文件对象:$file = request()->file('image');
2、使用Filesystem门面将文件保存至public磁盘的指定子路径:\think\facade\Filesystem::disk('public')->putFile('avatars', $file);
3、该操作返回完整存储路径(如avatars/20260424/abc123.jpg),可用于数据库记录或响应返回。
三、上传并自定义文件名
当业务要求固定命名规则(如用户ID_时间戳)时,应使用putFileAs方法替代putFile,避免框架自动生成的随机文件名影响可读性与检索。
1、构造目标文件名:$filename = 'user_' . request()->user->id . '_' . date('YmdHis') . '.png';
2、调用putFileAs写入指定名称:\think\facade\Filesystem::disk('public')->putFileAs('documents', $file, $filename);
3、注意:第二个参数为子目录路径,第三个参数为最终保存的文件名,二者共同组成完整相对路径。
四、读取文件内容与元数据
对已上传文件进行内容解析或信息校验时,需通过disk实例调用对应方法获取原始字节流或结构化元数据。
1、读取文件原始内容(适用于文本、JSON等小文件):\think\facade\Filesystem::disk('public')->get('avatars/20260424/abc123.jpg');
2、获取文件大小(单位:字节):\think\facade\Filesystem::disk('public')->getSize('avatars/20260424/abc123.jpg');
3、获取最后修改时间戳:\think\facade\Filesystem::disk('public')->getTimestamp('avatars/20260424/abc123.jpg');
五、删除与重命名文件
文件管理需支持安全清理与结构调整,ThinkFilesystem提供原子级操作方法,避免手动unlink引发的权限或路径错误。
1、删除指定路径下的单个文件:\think\facade\Filesystem::disk('public')->delete('avatars/20260424/abc123.jpg');
2、重命名文件(本质为移动操作):\think\facade\Filesystem::disk('public')->rename('oldname.jpg', 'newname.jpg');
3、批量删除目录下所有内容(慎用):\think\facade\Filesystem::disk('public')->deleteDirectory('temp/uploads');



















