PAYATHON 2026

Laravel 如何允许小于 1 KB 的非空文件通过验证?

数据小陈

结论

min:1 要求文件至少为 1 KB,所以 600 bytes 的文件会被拒绝。要允许小于 1 KB 的非空文件,可以保留 required、file 等规则,再添加自定义验证,检查上传文件的实际字节数是否大于 0。Laravel 的 min 规则无法直接按 bytes 表示“至少 1 byte”。

为什么 600 bytes 会报错

问题中的规则是:

$request->validate([
    'file' => [
        'required',
        'file',
        'extensions:zip',
        'max:1024',
        'min:1',
    ],
]);

文件大小规则使用 KB 作为单位。min:1 表示文件至少要有 1 KB;600 bytes 不足 1 KB,因此会出现 “The file field must be at least 1 kilobytes” 的错误。max:1024 表示文件最大为 1024 KB。

检查实际字节数

可以添加闭包规则,检查 UploadedFile 的大小是否大于零:

use Illuminate\Http\UploadedFile;

$request->validate([
    'file' => [
        'bail',
        'required',
        'file',
        'extensions:zip',
        'max:1024',
        function ($attribute, $value, $fail) {
            if ($value instanceof UploadedFile && $value->getSize() === 0) {
                $fail('The file must not be empty.');
            }
        },
    ],
]);

getSize() 返回文件大小,单位是 bytes。bail 会在某条规则失败后停止检查该字段;file 规则通过后,闭包会检查文件是否为 0 bytes。这样,600 bytes 的文件就不会因为小于 1 KB 而被拒绝。

注意事项

如果要求文件至少为 1 KB,保留 min:1 即可。如果只要求文件非空,就按 bytes 检查,不要用 min:1 代替。还要确认 extensions:zip 是否符合你的文件类型校验需求。

备注:内容仅供参考。