问题描述
Post Policy中content-length-range参数取值有误。
问题原因
您在发起PostObject请求上传文件时,可能会遇到与content-length-range相关的报错。这通常由以下两种原因导致:
content-length-range参数本身配置错误:在Post Policy的conditions中,content-length-range用于指定允许上传文件的最小和最大值。它的格式为 ["content-length-range", min-len, max-len]。其中,min-len(最小大小)和max-len(最大大小)都必须是正整数,并且max-len必须大于或等于min-len。如果格式或数值不正确,请求将会失败。
请求时间与服务器时间差异过大:Post请求中包含一个与时间相关的字段(例如x-oss-date或Policy中的expiration)。OSS服务器会校验收到的请求时间与服务器当前时间的差异。如果这个时间差超出了预设的阈值(通常是15分钟),服务器会拒绝该请求,并可能返回与策略(Policy)相关的错误,因为策略中定义了请求的有效时间范围。
问题示例
示例一:content-length-range参数配置错误
以下Post Policy中content-length-range的max-len被错误地指定为字符串"test",导致取值不合法。
{
"expiration": "2023-02-19T13:19:00.000Z",
"conditions": [
["content-length-range", "test", 10]
]
}示例二:客户端时间与服务器时间不一致
虽然Policy本身是正确的,但如果发起请求的客户端本地时间与OSS服务器时间相差很大(例如,相差数小时),请求头中的日期或Policy中的expiration字段可能已经失效或尚未生效,从而导致请求被拒绝。例如,客户端时间是上午8点,而服务器时间是下午3点,这可能导致Policy校验失败。
解决方案
针对不同的原因,请采取相应的解决方案:
修正content-length-range参数:
确保content-length-range中指定的max-len与min-len必须为正整数,且max-len必须大于或者等于min-len。{ "expiration": "2023-02-19T13:19:00.000Z", "conditions": [ ["content-length-range", 1, 1024] ] }同步客户端时间:
确保发起PostObject请求的客户端(无论是服务器还是Web浏览器)的系统时间与标准网络时间(NTP)同步。保持客户端与服务器端的时间一致,可以避免因时间差过大导致的请求签名或Policy过期错误。
相关文档
关于Post Policy的更多信息,请参见附录:Post Policy。
关于Web端表单直传OSS的示例,请参见JavaScript客户端签名直传。
关于调用PostObject接口的常见错误及解决方法,请参见Post Object错误及排查。