186
云计算
负载均衡
产品简介
产品价格
快速入门
用户指南
实践操作
常见问题
购买指南
云服务器
产品简介
计费规则
购买指导
控制台使用指南
常见问题
云数据库
产品简介
计费规则
购买指导
快速入门
连接实例
控制台使用指南
对象存储
产品简介
控制台使用指南
程序员百科
Python
天翼云对象存储(经典版)I型API参考-POST Object

产品推荐:

1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>

2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>>

3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>>

4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 

5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>>   



点击这里注册天翼云特邀VIP帐号,立即体验天翼云对象存储>>>


天翼云对象存储(经典版)I型API参考-POST Object


POST操作使用HTML表单将对象上传到指定的Bucket。POST是另一种形式的PUT操作,POST可以让使用者通过Browser-based的方式,将对象上传到指定bucket中。PUT的参数是通过HTTP Header提交的,而POST通过使用multipart/form-data编码的消息体中的字段进行提交。用户必须对操作的Bucket有写权限。OOS不存储部分对象:如果收到成功的响应,那么对象就是存储成功了。

为了保证数据在网络传输过程中没有损坏,可以使用Content-MD5字段进行校验。如果请求参数中有Content-MD5,OOS将会计算用户提交的对象的MD5值。如果计算出的值与用户提供的值不一致,OOS将会返回一个错误给用户。或者,用户可以在上传对象到OOS时计算对象的MD5值,并与OOS在响应中返回的ETag进行比较。ETag是对象内容的MD5值,不包括metadata。

请求语法

POST   /HTTP/1.1

Host:   BucketName.oos-cn.ctyunapi.cn

User-Agent:   browser_data

Accept:   file_types

Accept-Language:   Regions

Accept-Encoding:   encoding

Accept-Charset:   character_set

Keep-Alive:   300

Connection:   keep-alive

Content-Type:   multipart/form-data; boundary=9431149156168

Content-Length: length

 

--9431149156168

Content-Disposition:   form-data; name="key"

 

Key

--9431149156168

Content-Disposition:   form-data; name="success_action_redirect"

 

success_redirect

--9431149156168

Content-Disposition:   form-data; name="Content-Type"

 

content_type

--9431149156168

Content-Disposition:   form-data; name="x-amz-meta-uuid"

 

uuid

--9431149156168

Content-Disposition:   form-data; name="x-amz-meta-tag"

 

metadata

--9431149156168

Content-Disposition:   form-data; name="AWSAccessKeyId"

 

access-key-id

--9431149156168

Content-Disposition:   form-data; name="Policy"

 

encoded_policy

--9431149156168

Content-Disposition:   form-data; name="Signature"

 

signature=

--9431149156168

Content-Disposition:   form-data; name="file"; filename="MyFilename.jpg"

Content-Type:   image/jpeg

 

file_content

--9431149156168

Content-Disposition:   form-data; name="submit"

 

Upload   to OOS

--9431149156168—

表单字段

说明:表单中指定的每个表单字段(AWSAccessKeyId、签名、文件、策略和带x-ignore-前缀的字段名称除外)必须包含在policy条件列表中,两者需要保持一致。

名称

描述

是否必须

AWSAccessKeyId

根用户或拥有权限的子用户的访问密钥ID。如果请求包含Policy,对于V2签名,则此字段为必填字段。

类型:字符串

条件

Cache-Control,

Content-Type, Content-Disposition, Content-Encoding,   Expires

特定于REST的请求头。有关更多信息,请参阅PUT Object。

类型:字符串

file

文件或文本内容。文件或文本内容必须是Form表单的最后一个字段。一次只能上传一个文件。

类型:文件或文本内容

key

上传对象的名称。

可以使用${filename}变量来使用用户提供的文件名。例如,如果用户Betty上传的文件名为lolcatz.jpg, 字段值指定为/user/betty/${filename},那么保存的对象名称将会是/user/betty/lolcatz.jpg。

类型:字符串

policy

描述请求中允许的内容的安全策略。对于非匿名请求,Policy字段是必须的。

Policy的设置参见Bucket Policy安全策略

类型:字符串

条件

signature

使用AWSAccessKeyId对应的秘钥对policy的签名。如果请求包含Policy,对于V2签名,则此字段为必填字段。

signature   = Base64(HMAC-SHA1(YourSecrectKey,policy)),具体计算方法请查看用户签名验证(V2)和用户签名验证(V4)。

条件

X-Amz-Algorithm

签名算法。如果请求包含Policy,对于V4签名,则此字段为必填字段。

取值:AWS4-HMAC-SHA256。

条件

X-Amz-Credential

用户的accessKeyId和范围信息,范围信息包括请求日期、区域、服务、终止字符串aws4_request,格式如下:

<your-access-key-id>/<date>/<region>/<service>/aws4_request

其中:

l  date格式为YYYYMMDD。

l  region:

n  对于oos api:访问域名为oos-xx.ctyunapi.cn,region为xx。各资源池的详细访问域名详见 Endpoint列表;

n  对于统计api:访问域名为oos-xx-mg.ctyunapi.cn,region为xx,各资源池的详细访问域名详见Endpoint列表;

n  对于操作跟踪api:访问域名为oos-xx-cloudtrail.ctyunapi.cn,region为xx,各资源池的详细访问域名详见 Endpoint列表;

n  对于iam api:访问域名为oos-xx-iam.ctyunapi.cn,region为xx,各资源池的详细访问域名详见 Endpoint列表;

l  service:

n  若使用OOS API服务,service为s3;

n  若使用统计分析服务,service为s3;

n  若使用操作跟踪服务,service为cloudtrail;

n  若使用IAM服务,service为sts。

如果请求包含Policy,对于V4签名,则此字段为必填字段。

条件

X-Amz-Date

日期和时间格式必须遵循ISO   8601标准,并且必须使用“yyyyMMddT HHmmssZ”格式进行格式化。例如,如果日期和时间是“08/01/2018 15:32:41.982-700”,则必须首先将其转换为UTC(协调世界时),然后提交为“20180801T083241Z”。

如果请求包含Policy,对于V4签名,则此字段为必填字段。

条件

X-Amz-Signature

认证签名,此签名必须与OOS计算的签名相匹配;否则,OOS拒绝该请求。

如果请求包含Policy,对于V4签名,则此字段为必填字段。

条件

success_action_redirect,redirect

上传成功后客户端重定向到的URL。OOS将Bucket、对象名和etag值作为查询字符串参数附加到URL。

如果未指定   success_action_redirect,OOS将返回在success_action_status字段中指定的空文档类型。

如果OOS无法识别用户提供的URL,将忽略该字段。

如果上传失败,OOS将显示错误且不会执行重定向操作。

类型:字符串

默认值:无

注意redirect后续可能会被移除,建议使用success_action_redirect

success_action_status

如果没有指定success_action_redirect,上传成功后状态代码将返回到客户端。

有效值:200、201或204(默认)。

l  如果值被设置为200或204,OOS将返回一个空文档和一个200或204状态代码。

l  如果值被设置为201,OOS将返回一个XML文档和一个201状态代码。有关XML文档内容的信息,请参阅POST对象。

l  如果没有设置值或者设置了无效的值,OOS将返回一个空文档和一个204状态代码。

注意:某些版本的AdobeFlashplayer无法正确处理使用空白正文的HTTP响应。要通过AdobeFlash支持上传,建议您将success_action_status设置为201。

x-amz-storage-class

数据的存储类型。

类型:字符串

取值:

l  STANDARD:标准存储

l  STANDARD_IA:低频访问存储

默认值为STANDARD。

x-amz-meta-*

任何头以这个前缀开始都会被认为是用户的元数据,当用户检索时,它将会和对象一起被存储并返回。更多信息请参考PUT Object

类型:字符串

x-amz-website-redirect-location

 

如果Bucket配置为网站,重定向对这个对象的请求到相同Bucket的另外一个对象或者到一个其他的URL。OOS会保存这个值到对象的metadata。

下面这个例子表示请求头设置重定向到相同Bucket的另一个对象(anotherPage.html)。

x-amz-website-redirect-location:   /anotherPage.html

重定向到其他网站的例子:

x-amz-website-redirect-location:   http://www.example.com/

注意:这个值必须以”/”、http://或https://开头,且长度不能超过 2KiB。开头,且长度不能超过2KiB。

x-ctyun-data-location

设置数据存储的位置。

注意:香港节点不支持此参数。

类型:key-value形式。

有效值

格式为:type=Local,scheduleStrategy=scheduleStrategy或者type=Specified,location=location,scheduleStrategy=scheduleStrategy

l  type:指定数据存储位置的类型,取值为Local或者Specified。Local表示就近写入,Specified表示指定位置。如果type取值为Specified,则需要指定具体的数据位置location,location可以填写多个,以逗号分隔,可取值为ChengDu、GuiYang、LaSa、LanZhou、QingDao、SH2、ShenYang、ShenZhen、SuZhou、WuHan、WuHu、WuLuMuQi、ZhengZhou。

l  scheduleStrategy:调度策略,取值为:

Ø  Allowed:允许OOS自动调度数据存储位置

Ø  NotAllowed:不允许OOS自动调度数据存储位置。

响应头

响应头(除了通用的响应头以外,本操作可以包括以下响应头。)

名称

描述

x-amz-expiration

如果对象设置了过期时间(参考PUT   Bucket Lifecycle章节),响应头会增加过期信息。过期信息包括过期日期和rule-idkeyvalue。rule-id的value是经过URL编码的。

类型:字符串

success_action_redirect, redirect

上传成功重定向的URL。

类型:字符串

响应结果

名称

描述

Bucket

存储Object的Bucket名称。

类型:字符串。

父元素:PostResponse

ETag

ETag是对象内容经过MD5哈希后得到的值。用户可以在GET请求中使用If-Match请求头。ETag仅反映对象内容的变化,不包括元数据。

类型:字符串

父元素:PostResponse

Key

对象名称。

类型:字符串

父元素:PostResponse

Location

对象的URL。

类型:字符串

父元素:   PostResponse

请求示例

POST /bucket.example HTTP/1.1
Content-Length: 1229
Content-Type: multipart/form-data; boundary=k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ; charset=UTF-8
Host: oos-cn.ctyunapi.cn
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.3.6 (java 1.5)
Accept-Encoding: gzip,deflate

--k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ
Content-Disposition: form-data; name="key"

demo/postobject
--k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ
Content-Disposition: form-data; name="AWSAccessKeyId"

ac3b2be6971261293a4c
--k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ
Content-Disposition: form-data; name="Policy"

eyJleHBpcmF0aW9uIjoiMjAyMS0xMS0xM1QxMzo1MzozNS4wMzVaIiwiY29uZGl0aW9ucyI6W3siYnVja2V0IjoiYnVja2V0LmV4YW1wbGUifSx7ImtleSI6ImRlbW8vcG9zdG9iamVjdCJ9LHsieC1hbXotbWV0YS1jcmMiOiI0NjE3MDc2NjkifSx7IngtYW16LW1ldGEtdGVzdCI6Im9iamVjdCBtZXRhIn1dfQ==
--k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ
Content-Disposition: form-data; name="Signature"

jFM6jObvosHHV1Uv8m/poPp/VA4=
--k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ
Content-Disposition: form-data; name="x-amz-meta-crc"

461707669
--k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ
Content-Disposition: form-data; name="x-amz-meta-test"

object meta
--k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ
Content-Disposition: form-data; name="file"; filename="demo/postobject"
Content-Type: multipart/form-data; charset=ISO-8859-1

Hello world!
--k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ
Content-Disposition: form-data; name="submit"

upload to oos
--k4zJkdvV0SoH10zTDfBUjJUhbl_bDxAt0dgoJ--

响应示例

下面的代码演示了一个简单的响应头。

HTTP/1.1 204 No Content
ETag: "86fb269d190d2c85f6e0468ceca42a20"
Date: Fri, 12 Nov 2021 05:53:36 GMT
x-amz-request-id: e35b1da8243e49fcec585c636b63656b2a2c3220222426282a
Location: http://oos-cn.ctyunapi.cn/bucket.example/demo%2Fpostobject
Server: CTYUN

表单结构

表单声明包含三个部分:action、method和enctype。如果这些值当中的任意一个设置不正确,请求将失败。action指定处理请求的URL,必须将它设置为Bucket的URL。例如:Bucket的名称是BucketName,则URL为http://BucketName.oos-cn.ctyunapi.cn/。

method必须是POST。enctype设置为“multipart/form-data”。

<form action="http:// BucketName.oos-cn.ctyunapi.cn /" method="post"enctype="multipart/form-data">
</form>

Post Policy字段的构造

Post Policy是使用UTF-8和Base64编码的JSON文档,它指定了请求必须满足的条件并且用于对内容进行身份验证。根据您设计策略文档的方式,您可以对每次上传、每个用户、所有上传或根据其他能够满足您需要的设计来使用它们。

下面是一个简单的Post Policy示例

{
   "expiration": "2007-12-01T12:00:00.000Z",
   "conditions": [
       {
           "bucket": "johnsmith"
       },
       [
           "starts-with",
           "$key",
           "user/eric/"
       ]
   ]
}

策略文档由过期(expiration)和条件(conditions)两部分构成。

过期

过期元素采用ISO 8601UTC日期格式来指定策略的过期日期。例如,“2007-12-01T12:00:00.000Z”指定策略在2007年12月1日午夜UTC之后失效。在策略文档中过期字段是必需的。

条件

策略文档中的条件验证上传的对象的内容。您在表单中指定的每个表单字段(AWSAccessKeyId、签名、文件、策略和带x-ignore-前缀的字段名称除外)必须包含在条件列表中。如果您有多个具有相同名称的字段,使用逗号进行分隔。例如,如果您有两个名为x- amz-meta-tag的字段,第一个字段的值为Ninja,第二个字段的值为Stallman,您可以将策略文档设置为Ninja,Stallman。

针对扩展的字段执行前缀匹配。例如,如果您将对象名称字段设置为user/betty/${filename},您的策略可能是["starts-with", "$key", "user/betty/" ]。请勿输入["starts-with", "$key", "user/betty/${filename}"]。

元素名称

说明

bucket

指定上传内容允许的Bucket。

支持精确匹配和starts-with。

content-length-range

指定已上传内容允许长度的最小值和最大值。

支持范围匹配。

Cache-Control,   Content-Type, Content-Disposition, Content- Encoding, Expires

特定于 REST 的标头。

支持精确匹配和starts-with。

Key

已上传对象的名称或对象名称前缀。

支持精确匹配和   starts-with。

success_action_redirect,  redirect

上传成功后客户端重定向到的URL。

支持精确匹配和starts-with。

success_action_status

如果没有指定   success_action_redirect,上传成功后状态代码将返回到客户端。

支持精确匹配。

x-amz-meta- *

特定于用户的元数据。

支持精确匹配和   starts-with。

注意:如果您的工具包添加了其他字段(例如,Flash添加了文件名),您必须将它们添加到策略文档。如果您可以控制此功能,将 x-ignore- 添加为字段的前缀以使OOS忽略此功能并使其不影响此功能的未来版本。

条件匹配

下表介绍条件匹配类型。尽管您必须为您在表单中指定的每个表单字段指定一个条件,您也可以通过为某个表单字段指定多个条件来创建更复杂的匹配条件。

条件

说明

精确匹配

精确匹配将验证字段是否匹配特定的值。此示例指示bucket必须设置为BucketName

{"bucket": "BucketName"}

也可写为:

[ "eq", "bucket": "BucketName"]

Starts With

如果值必须从某个特定的值开始,请使用starts-with。本示例指示密钥必须从 user/betty 开始:

["starts-with", "$key",   "user/betty/"]

匹配任何内容

要配置策略以允许字段中的任何内容,请使用 starts-with   和一个空值。本示例允许任何 success_action_redirect:

["starts-with", "$success_action_redirect",   ""]

指定范围

对于接受范围的字段,请使用逗号来分隔上限和下限值。本示例允许1到10 MiB 的文件大小:

["content-length-range", 1048579,   10485760]

 

字符串转义

转义序列

描述

\\

反斜杠。

\$

美元符号。

\b

退格键。

\f

换页。

\n

新建行。

\r

回车。

\t

水平选项卡。

\v

垂直选项卡。

\uxxxx

所有Unicode 字符。

Signature字段的构造步骤

步骤

说明

1

使用UTF-8对策略进行编码。

2

使用Base64对这些UTF-8字节进行编码。

3

使用HMAC SHA-1,通过您的秘密访问密钥签署策略。

4

使用Base64对SHA-1签名进行编码。


这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!