最直接标准的方式是调用文件对象的getsize()方法获取字节数,如$file->getsize()返回2097152;可封装formatfilesize()转为"1.95 mb"等可读格式;验证规则中size参数须为字节整数,且需显式调用validaterule();需确保php/nginx上传限制足够大以保障getsize()可用。

ThinkPHP 中获取上传文件大小,最直接、标准的方式是调用文件对象的 getSize() 方法,返回值单位为字节(bytes),无需额外解析或计算。
一、基础获取:使用 getSize() 方法
在控制器中通过 request()->file() 获取文件对象后,直接调用 getSize():
$file = $this->request->file('avatar');$sizeBytes = $file->getSize(); // 例如返回 2097152(即 2MB)- 该方法仅适用于已成功上传的临时文件,若
$file为空或上传失败,会报错或返回 0
二、转换为可读格式(如 KB/MB)
getSize() 返回的是纯数字字节,展示时建议转成带单位的字符串。可自行封装一个简单函数:
function formatFileSize($bytes) { $units = ['B','KB','MB','GB']; for ($i = 0; $bytes >= 1024 && $i- 调用:
echo formatFileSize($file->getSize()); // 输出类似 "1.95 MB"
三、配合验证规则使用 size 限制
ThinkPHP 的文件验证规则中,size 参数单位也是字节,必须严格匹配:
- 正确写法:
$file->validateRule(['size' => 5242880]); // 5MB - 错误写法:
['size' => '5MB']或['size' => 5 * 1024 * 1024](TP 不解析表达式) - 注意:validateRule() 必须显式调用才生效,不能只定义规则不触发
四、注意底层限制是否影响 getSize() 可用性
getSize() 能正常返回,前提是文件已完整上传到临时目录。如果因 PHP 或 Nginx 限制被截断(如报 413 错误),则 $file 可能为 null,getSize() 无法执行:
- 检查 php.ini:确保
upload_max_filesize和post_max_size足够大 - 检查 Nginx:确认
client_max_body_size已同步放宽 - 上传前可通过 JS 前端校验初步拦截超大文件,提升用户体验
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











