对象存储本身不直接提供全局桶级单文件大小限制开关,但可通过服务端生成的Post Policy在表单上传中嵌入content-length-range条件(如["content-length-range", 1024, 5242880])实现强校验,仅对PostObject有效,需配合签名与合理过期时间。

对象存储本身不直接提供全局桶级的单文件大小限制开关,但可以通过服务端生成的上传策略(Policy)在客户端上传环节实现精准控制。核心思路是:**把大小限制“嵌入”到临时授权凭证中,由服务端签发、客户端执行、OSS/COS 在接收时校验**。
用 Post Policy 限制单文件上传体积
这是最常用且标准的做法,适用于 HTML 表单上传(PostObject)场景。服务端生成包含 content-length-range 条件的签名策略,客户端按此策略提交请求,OSS 会在接收时强制校验文件实际大小是否落在指定区间内。
- 策略中添加条件:
["content-length-range", 最小字节数, 最大字节数] - 例如限制单文件为 1 KB 到 5 MB:
["content-length-range", 1024, 5242880] - 该条件必须放在 Policy 的
conditions数组中,且需与其他字段(如 bucket、key 前缀、过期时间等)一同签名 - 上传时若文件超出范围,OSS 直接返回
400 Bad Request,错误码可能是EntityTooLarge或InvalidPolicyDocument
策略生效的前提和注意事项
这个限制只对使用 PostObject 方式上传有效,不适用于 PUT Object、分片上传(MultipartUpload)、SDK 直传等其他方式。也就是说,它是一种“前端拦截+服务端强校验”的组合机制,依赖于服务端正确构造 Policy 并安全下发。
- 服务端必须使用合法 AccessKey 对 Policy 进行签名,客户端无法篡改
- Policy 中的
expiration时间不宜过长,建议控制在 15–60 分钟内,防止凭证泄露滥用 - 不能单独靠前端 JS 检查文件大小,因为可被绕过;Policy 校验才是真正可靠的防线
- 若需统一限制所有上传方式(包括 SDK 和命令行工具),需在业务层做网关拦截或使用函数计算(FC)做上传代理并做前置校验
其他补充控制方式
如果业务场景不局限于表单上传,还可结合以下手段增强管控:
- API/SDK 层拦截:在调用 PutObject 或 InitiateMultipartUpload 前,由后端服务检查文件元信息或预检大小,拒绝超限请求
- OSS 回调(Callback)验证:上传完成后触发回调到业务服务器,校验已上传对象的实际 size,异常则自动删除并告警
-
桶策略(Bucket Policy)或 RAM 策略:虽不能按文件大小限制,但可配合条件键(如
aws:ContentLengthRange)在部分云厂商中实现类似效果(需确认当前云平台是否支持)

















