对象存储服务 OBS-基于浏览器上传的表单中携带签名:Conditions
Conditions
Conditions是一个用于验证本次请求合法的一种机制,可以使用这些条件限制请求中必须包含的内容。实例中的条件要求请求的桶名必须是book,对象名必须以user/为前缀,对象的acl必须是公共可读。除了AccessKeyId、signature、file、policy、token、field names以及前缀为x-ignore-外的表单中的所有项,都需要包含在policy中。下表是conditions中应该包含的项:
元素名称 |
描述 |
---|---|
x-obs-acl |
请求中的ACL。 支持精确匹配和starts-with条件匹配。 |
content-length-range |
设置上传对象的最大最小长度,支持range匹配。 |
Cache-Control, Content-Type, Content-Disposition, Content-Encoding, Expires |
REST请求特定头域。 支持精确匹配和starts-with条件匹配。 |
key |
上传对象的名字。 支持精确匹配和starts-with条件匹配。 |
bucket |
请求桶名。 支持精确匹配。 |
success_action_redirect |
上传对象成功后重定向的URL地址。具体描述请参见5.4.2-POST上传。 支持精确匹配和starts-with条件匹配。 |
success_action_status |
如果未指定success_action_redirect,则成功上传时返回给客户端的状态码。具体描述请参见5.4.2-POST上传。 支持精确匹配。 |
x-obs-meta-* |
用户自定义元数据。 元素中的关键字不允许含有非ASCII码或不可识别字符,如果一定要使用非ASCII码或不可识别字符,需要客户端自行做编解码处理,可以采用URL编码或者Base64编码,服务端不会做解码处理。 支持精确匹配和starts-with条件匹配。 |
x-obs-* |
其他以x-obs-为前缀的头域。 支持精确匹配和starts-with条件匹配。 |
x-obs-security-token |
请求消息头中字段名。 临时AK/SK和securitytoken鉴权必加字段名。如何获取临时AK/SK和securitytoken请参考通过token获取临时访问密钥和securitytoken。 |
Policy条件匹配的方式如下:
条件 |
描述 |
---|---|
Exact Matches |
默认是完全匹配,post表单中该项的值必须和policy的conditions中设置的值完全一样。例如:上传对象的同时设置对象ACL为public-read,表单中x-obs-acl元素的值为public-read,policy中的conditions可以设置为 {"x-obs-acl": "public-read" }或者[ "eq", "$x-obs-acl", "public-read"],这两者是等效的。 |
Starts With |
如果使用该条件,则post表单中对应元素的值必须是固定字符串开始。例如:上传对象名以user/为前缀,表单中key元素的值可以是user/test1、user/test2,policy的conditions中该条件如下: ["starts-with", "$key", "user/"] |
Matching Any Content |
post表单中对应元素的值可以是任意值。例如:请求成功后重定向的地址可以是任意地址,表单中success_action_redirect元素的值可以是任意值,policy的conditions中该条件如下: ["starts-with", "$success_action_redirect", ""] |
Specifying Ranges |
post表单中file元素文件的内容长度可以是一个指定的范围,只用于限制对象大小。例如上传对象大小为1-10MB,表单中file元素的内容长度可以是1048576-10485760,policy的conditions中该条件如下,注意值没有双引号: ["content-length-range", 1048576, 10485760] |
![](https://support.huaweicloud.com/api-obs/public_sys-resources/note_3.0-zh-cn.png)
policy使用json格式,conditions可以支持 { } 和 [ ] 两种方式,{ }中包含表单元素的key和value两项,以冒号分隔;[ ]中包含条件类型、key、value三项,以逗号分隔,元素key之前使用$字符表示变量。
Policy中必须转义的字符如下:
转义后的字符 |
真实字符 |
---|---|
\\ |
反斜杠(\) |
\$ |
美元符号($) |
\b |
退格 |
\f |
换页 |
\n |
换行 |
\r |
回车 |
\t |
水平制表 |
\v |
垂直制表 |
\uxxxx |
所有Unicode字符 |