tp6推荐用request::file()获取上传文件并校验空值和isvalid(),再通过validate或getmime()验证类型大小,本地保存至public/upload/并生成唯一文件名,生产环境建议上传至阿里云oss等对象存储。

接收并校验上传文件
TP6 中推荐使用 Request::file() 获取上传的图片文件,而不是直接操作 $_FILES。例如:
$file = Request::file('file');
拿到文件对象后,应立即判断是否为空,避免后续操作报错:
- 若
$file === null,说明前端未传文件或字段名不匹配,应直接返回错误提示 - 可用
$file->isValid()进一步确认文件是否合法(如未超限、未被中断)
验证图片类型与大小
TP6 提供了内置验证器,可简洁完成格式和尺寸控制:
ThinkPHP 6.0.0 是国产轻量级 PHP 框架的里程碑式版本,于 2019 年正式发布。该版本基于“精简核心”与“统一用法”原则,对底层架构进行了彻底重构。它强制要求 PHP 7.1+ 环境,全面启用强类型声明,深度支持 PSR 规范,并引入了独立的多应用模式、改进的中间件机制及全新的事件系统,标志着 ThinkPHP 正式迈入现代化、标准化与企业级开发的新阶段。
$result = validate(['file' => 'fileSize:2097152,fileExt:jpg,png,gif,jpeg'])->check(['file' => $file]);
其中 2097152 表示 2MB(单位字节),fileExt 支持逗号分隔的扩展名白名单。也可用更严格的 MIME 类型校验:
in_array($file->getMime(), ['image/jpeg', 'image/png', 'image/gif'])- 注意:仅靠后缀判断不安全,必须结合
getMime()或finfo_file()
保存到本地 public 目录
若图片需直接通过 HTTP 访问(如 /upload/xxx.jpg),建议存入 public/upload/ 目录:
- 先确保目录存在:
is_dir(public_path('upload')) || mkdir(public_path('upload'), 0755, true); - 生成唯一文件名,避免中文乱码和重名覆盖,例如:
$newName = date('Ymd') . '/' . uniqid() . '.' . $file->extension(); - 调用
$file->move(public_path('upload'), $newName)完成保存 - 返回路径时拼接为
/upload/ . str_replace('\', '/', $newName)(兼容 Windows 路径分隔符)
上传至云存储(如阿里云 OSS)
生产环境更推荐将图片存到 OSS 等对象存储,减轻服务器压力并提升访问性能:
- 安装 SDK:
composer require aliyuncs/oss-sdk-php - 实例化
OssClient,配置AccessKeyId、Endpoint和Bucket - 构造唯一
$object路径(如img/head/20260817/abc123.png) - 调用
$ossClient->uploadFile($bucket, $object, $file->getTmpName()) - 成功后返回外网可访问的 URL,注意 Bucket 权限设为「公共读」或签临时 URL










