对象存储OSSAPI参考API参考OSSAPI文档简介阿里云对象存储服务(ObjectStorageService,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务.
用户可以通过本文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据.
基于OSS,用户可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务.
请确保在使用这些接口前,已充分了解了OSS产品说明、使用协议和收费方式.
API概览基本概念本文中出现的一些术语请参考OSS基本概念关于Service操作关于Bucket的操作API描述GetService得到该账户下所有BucketAPI描述PutBucket创建BucketPutBucketACL设置Bucket访问权限PutBucketLogging开启Bucket日志PutBucketWebsite设置Bucket为静态网站托管模式PutBucketReferer设置Bucket的防盗链规则PutBucketLifecycle设置Bucket中Object的生命周期规则对象存储OSSAPI参考1关于Object的操作关于MultipartUpload的操作GetBucketAcl获得Bucket访问权限GetBucketLocation获得Bucket所属的数据中心位置信息GetBucketLogging查看Bucket的访问日志配置情况GetBucketWebsite查看Bucket的静态网站托管状态GetBucketReferer查看Bucket的防盗链规则GetBucketLifecycle查看Bucket中Object的生命周期规则DeleteBucket删除BucketDeleteBucketLogging关闭Bucket访问日志记录功能DeleteBucketWebsite关闭Bucket的静态网站托管模式DeleteBucketLifecycle删除Bucket中Object的生命周期规则GetBucket(ListObject)获得Bucket中所有Object的信息GetBucketInfo获取Bucket信息API描述PutObject上传objectCopyObject拷贝一个object成另外一个objectGetObject获取ObjectDeleteObject删除ObjectDeleteMultipleObjects删除多个ObjectHeadObject获得Object的meta信息PostObject使用Post上传ObjectAppendObject在Object尾追加上传数据PutObjectACL设置ObjectACLGetObjectACL获取ObjectACL信息Callback上传回调API描述InitiateMultipartUploade初始化MultipartUpload事件UploadPart分块上传文件UploadPartCopy分块复制上传文件对象存储OSSAPI参考2---跨域资源共享(CORS)访问控制用户签名验证(Authentication)OSS通过使用AccessKeyId/AccessKeySecret对称加密的方法来验证某个请求的发送者身份.
AccessKeyId用于标示用户,AccessKeySecret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,其中AccessKeySecret必须保密,只有用户和OSS知道.
AccessKey根据所属账号的类型有所区分阿里云账户AccessKey:每个阿里云账号提供的AccessKey拥有对拥有的资源有完全的权限RAM账户AccessKey:RAM账户由阿里云账号授权生成,所拥的AccessKey拥有对特定资源限定的操作权限STS临时访问凭证:由阿里云账号或RAM账号生成,所拥的AccessKey在限定时间内拥有对特定资源限定的操作权限.
过期权限收回.
详情请参考OSS产品文档中访问身份验证当用户想以个人身份向OSS发送请求时,需要首先将发送的请求按照OSS指定的格式生成签名字符串;然后使用AccessKeySecret对签名字符串进行加密产生验证码.
OSS收到请求以后,会通过AccessKeyId找到对应的AccessKeySecret,以同样的方法提取签名字符串和验证码,如果计算出来的验证码和提供的一样即认为该请求是有效的;否则,OSS将拒绝处理这次请求,并返回HTTP403错误.
CompleteMultipartUpload完成整个文件的MultipartUpload上传AbortMultipartUpload取消MultipartUpload事件ListMultipartUploads罗列出所有执行中的MultipartUpload事件ListParts罗列出指定UploadID所属的所有已经上传成功PartAPI描述PutBucketcors在指定Bucket设定一个CORS的规则GetBucketcors获取指定的Bucket目前的CORS规则DeleteBucketcors关闭指定Bucket对应的CORS功能并清空所有规则OptionObject跨域访问preflight请求对象存储OSSAPI参考3--------1.
2.
3.
4.
在Header中包含签名用户可以在HTTP请求中增加Authorization(授权)的Header来包含签名(Signature)信息,表明这个消息已被授权.
Authorization字段计算的方法AccessKeySecret表示签名所需的秘钥VERB表示HTTP请求的Method,主要有PUT,GET,POST,HEAD,DELETE等"\n"表示换行符Content-MD5表示请求内容数据的MD5值,对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码而得到.
该请求头可用于消息合法性的检查(消息内容是否与发送时一致),如"eB5eJF1ptWaXm4bijSPyxw==",也可以为空.
详情参看RFC2616Content-MD5Content-Type表示请求内容的类型,如"application/octet-stream",也可以为空Date表示此次操作的时间,且必须为HTTP1.
1中支持的GMT格式,如"Sun,22Nov201508:16:38GMT"CanonicalizedOSSHeaders表示以"x-oss-"为前缀的httpheader的组合CanonicalizedResource表示用户想要访问的OSS资源其中,Date和CanonicalizedResource不能为空;如果请求中的DATE时间和OSS服务器的时间差正负15分钟以上,OSS服务器将拒绝该服务,并返回HTTP403错误.
构建CanonicalizedOSSHeaders的方法所有以"x-oss-"为前缀的HTTPHeader被称为CanonicalizedOSSHeaders.
它的构建方法如下:将所有以"x-oss-"为前缀的HTTP请求头的名字转换成小写字母.
如'X-OSS-Meta-Name:TaoBao'转换成'x-oss-meta-name:TaoBao'.
如果请求是以STS获得的AccessKeyId和AccessKeySecret发送时,还需要将获得的security-token值,以x-oss-security-token:security-token值的形式加入到签名字符串中.
将上一步得到的所有HTTP请求头按照名字的字典序进行升序排列.
删除请求头和内容之间分隔符两端出现的任何空格.
如'x-oss-meta-name:TaoBao'转换成:'x-oss-meta-name:TaoBao'.
"Authorization:OSS"+AccessKeyId+":"+SignatureSignature=base64(hmac-sha1(AccessKeySecret,VERB+"\n"+Content-MD5+"\n"+Content-Type+"\n"+Date+"\n"+CanonicalizedOSSHeaders+CanonicalizedResource))对象存储OSSAPI参考45.
1.
2.
3.
4.
1.
2.
3.
4.
5.
----将每一个头和内容用"\n"分隔符分隔拼成最后的CanonicalizedOSSHeaders.
注意构建CanonicalizedResource的方法用户发送请求中想访问的OSS目标资源被称为CanonicalizedResource.
它的构建方法如下:将CanonicalizedResource置成空字符串("");放入要访问的OSS资源:"/BucketName/ObjectName"(无ObjectName则CanonicalizedResource为"/BucketName/",如果同时也没有BucketName则为"/")如果请求的资源包括子资源(sub-resource),那么将所有的子资源按照字典序,从小到大排列并以&为分隔符生成子资源字符串.
在CanonicalizedResource字符串尾添加""和子资源字符串.
此时的CanonicalizedResource例子如:/BucketName/ObjectNameacl&uploadId=UploadId如果用户请求在查询字符串(querystring)中指定了要重写(override)返回请求的header,那么将这些查询字符串及其请求值按照字典序,从小到大排列,以&为分隔符,按参数的字典序添加到CanonicalizedResource中.
此时的CanonicalizedResource例子:/BucketName/ObjectNameacl&response-content-type=ContentType&uploadId=UploadId.
OSS支持的override请求头参考GetObjectOSS目前支持的子资源(sub-resource)包括:acl,uploadId,partNumber,uploads,logging,website,location,lifecycle,referer,cors,delete,append,position,bucketInfo计算签名头规则签名的字符串必须为UTF-8格式.
含有中文字符的签名字符串必须先进行UTF-8编码,再与AccessKeySecret计算最终签名.
签名的方法用RFC2104中定义的HMAC-SHA1方法,其中Key为AccessKeySecret.
Content-Type和Content-MD5在请求中不是必须的,但是如果请求需要签名验证,空值的话以换行符"\n"代替.
在所有非HTTP标准定义的header中,只有以"x-oss-"开头的header,需要加入签名字符串;其他非HTTP标准header将被OSS忽略(如上例中的x-oss-magic是需要加入签名字符串的).
以"x-oss-"开头的header在签名验证前需要符合以下规范:header的名字需要变成小写.
header按字典序自小到大排序.
分割headername和value的冒号前后不能有空格.
每个Header之后都有一个换行符"\n",如果没有Header,CanonicalizedOSSHeaders就设置为空.
1.
CanonicalizedOSSHeaders可以为空.
无需添加最后的"\n".
2.
如果只有一个,则如'x-oss-meta-a\n'.
注意最后的"\n".
3.
如果有多个,则如'x-oss-meta-a:a\nx-oss-meta-b:b\nx-oss-meta-c:c\n'.
注意最后的"\n".
对象存储OSSAPI参考51.
签名示例假如AccessKeyId是"44CF9590006BF252F707",AccessKeySecret是"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"可用以下方法计算签名(Signature):python示例代码:签名(Signature)计算结果应该为26NBxoKdsyly4EDv6inkoDft/yA=,因为Authorization="OSS"+AccessKeyId+":"+Signature所以最后Authorization为"OSS44CF9590006BF252F707:26NBxoKdsyly4EDv6inkoDft/yA="然后加上Authorization头来组成最后需要发送的消息:细节分析如果传入的AccessKeyId不存在或inactive,返回403Forbidden.
错误码:InvalidAccessKeyId.
请求签名字符串计算公式签名字符串PUT/nelsonHTTP/1.
0Content-MD5:eB5eJF1ptWaXm4bijSPyxw==Content-Type:text/htmlDate:Thu,17Nov200518:49:58GMTHost:oss-example.
oss-cn-hangzhou.
aliyuncs.
comX-OSS-Meta-Author:foo@bar.
comX-OSS-Magic:abracadabraSignature=base64(hmac-sha1(AccessKeySecret,VERB+"\n"+Content-MD5+"\n"+Content-Type+"\n"+Date+"\n"+CanonicalizedOSSHeaders+CanonicalizedResource))"PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nThu,17Nov200518:49:58GMT\nx-oss-magic:abracadabra\nx-oss-meta-author:foo@bar.
com\n/oss-example/nelson"importbase64importhmacimportshah=hmac.
new("OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV","PUT\nODBGOERFMDMzQTczRUY3NUE3NzA5QzdFNUYzMDQxNEM=\ntext/html\nThu,17Nov200518:49:58GMT\nx-oss-magic:abracadabra\nx-oss-meta-author:foo@bar.
com\n/oss-example/nelson",sha)Signature=base64.
b64encode(h.
digest())print("Signature:%s"%Signature)PUT/nelsonHTTP/1.
0Authorization:OSS44CF9590006BF252F707:26NBxoKdsyly4EDv6inkoDft/yA=Content-Md5:eB5eJF1ptWaXm4bijSPyxw==Content-Type:text/htmlDate:Thu,17Nov200518:49:58GMTHost:oss-example.
oss-cn-hangzhou.
aliyuncs.
comX-OSS-Meta-Author:foo@bar.
comX-OSS-Magic:abracadabra对象存储OSSAPI参考62.
3.
4.
5.
6.
若用户请求头中Authorization值的格式不对,返回400BadRequest.
错误码:InvalidArgument.
OSS所有的请求都必须使用HTTP1.
1协议规定的GMT时间格式.
其中,日期的格式为:date1=2DIGITSPmonthSP4DIGIT;daymonthyear(e.
g.
,02Jun1982)上述日期格式中,"天"所占位数都是"2DIGIT".
因此,"Jun2"、"2Jun1982"和"2-Jun-82"都是非法日期格式.
如果签名验证的时候,头中没有传入Date或者格式不正确,返回403Forbidden错误.
错误码:AccessDenied.
传入请求的时间必须在OSS服务器当前时间之后的15分钟以内,否则返回403Forbidden.
错误码:RequestTimeTooSkewed.
如果AccessKeyId是active的,但OSS判断用户的请求发生签名错误,则返回403Forbidden,并在返回给用户的response中告诉用户正确的用于验证加密的签名字符串.
用户可以根据OSS的response来检查自己的签名字符串是否正确.
返回示例:常见问题SignatureDoesNotMatchTherequestsignaturewecalculateddoesnotmatchthesignatureyouprovided.
Checkyourkeyandsigningmethod.
4745540a0a0a5765642c203131204d617920323031312030373a35393a323520474d540a2f75737265616c746573743f61636c1E446260FF9B10C2oss-cn-hangzhou.
aliyuncs.
comy5H7yzPsA/tP4+0tH1HHvPEwUv8=GETWed,11May201107:59:25GMT/oss-exampleaclAKIAIVAKMSMOY7VOMRWQ对象存储OSSAPI参考7-Content-MD5的计算方法除了使用AuthorizationHead,用户还可以在URL中加入签名信息,这样用户就可以把该URL转给第三方实现授权访问.
实现方式URL签名示例:URL签名,必须至少包含Signature,Expires,OSSAccessKeyId三个参数.
Expires这个参数的值是一个UNIX时间(自UTC时间1970年1月1号开始的秒数,详见wiki),用于标识该URL的超时时间.
如果OSS接收到这个URL请求的时候晚于签名中包含的Expires参数时,则返回请求超时的错误码.
例如:当前时间是1141889060,开发者希望创建一个60秒后自动失效的URL,则可以设置Expires时间为1141889120.
Content-MD5的计算以消息内容为"123456789"来说,计算这个字符串的Content-MD5正确的计算方式:标准中定义的算法简单点说就是:1.
先计算MD5加密的二进制数组(128位).
2.
再对这个二进制进行base64编码(而不是对32位字符串编码).
以Python为例子:正确计算的代码为:>>>importbase64,hashlib>>>hash=hashlib.
md5()>>>hash.
update("0123456789")>>>base64.
b64encode(hash.
digest())'eB5eJF1ptWaXm4bijSPyxw=='需要注意正确的是:hash.
digest(),计算出进制数组(128位)>>>hash.
digest()'x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7'常见错误是直接对计算出的32位字符串编码进行base64编码.
例如,错误的是:hash.
hexdigest(),计算得到可见的32位字符串编码>>>hash.
hexdigest()'781e5e245d69b566979b86e28d23f2c7'错误的MD5值进行base64编码后的结果:>>>base64.
b64encode(hash.
hexdigest())'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='http://oss-example.
oss-cn-hangzhou.
aliyuncs.
com/oss-api.
pdfOSSAccessKeyId=nz2pc56s936**9l&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D对象存储OSSAPI参考8--1.
2.
3.
4.
5.
----OSSAccessKeyId即密钥中的AccessKeyId.
Signature表示签名信息.
所有的OSS支持的请求和各种Header参数,在URL中进行签名的算法和在Header中包含签名的算法基本一样.
其中,与header中包含签名相比主要区别如下:通过URL包含签名时,之前的Date参数换成Expires参数.
不支持同时在URL和Head中包含签名.
如果传入的Signature,Expires,OSSAccessKeyId出现不止一次,以第一次为准.
请求先验证请求时间是否晚于Expires时间,然后再验证签名.
将签名字符串放到url时,注意要对url进行urlencode临时用户URL签名时,需要携带security-token,格式如下:示例代码URL中添加签名的python示例代码:提示:上面为python的示例代码OSSSDK中提供了提供URL签名的方法,使用方法请参看SDK文件中的授权访问章节章节OSSSDK的URL签名实现,请参看下表Signature=urlencode(base64(hmac-sha1(AccessKeySecret,VERB+"\n"+CONTENT-MD5+"\n"+CONTENT-TYPE+"\n"+EXPIRES+"\n"+CanonicalizedOSSHeaders+CanonicalizedResource)))http://oss-example.
oss-cn-hangzhou.
aliyuncs.
com/oss-api.
pdfOSSAccessKeyId=nz2pc56s936**9l&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D&security-token=SecurityTokenimportbase64importhmacimportshaimporturllibh=hmac.
new("OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV","GET\n\n\n1141889120\n/oss-example/oss-api.
pdf",sha)urllib.
quote(base64.
encodestring(h.
digest()).
strip())对象存储OSSAPI参考91.
2.
3.
4.
5.
6.
7.
--细节分析使用在URL中签名的方式,会将你授权的数据在过期时间以内曝露在互联网上,请预先评估使用风险.
PUT和GET请求都支持在URL中签名.
在URL中添加签名时,Signature,Expires,OSSAccessKeyId顺序可以交换,但是如果Signature,Expires,OSSAccessKeyId缺少其中的一个或者多个,返回403Forbidden.
错误码:AccessDenied.
如果访问的当前时间晚于请求中设定的Expires时间,返回403Forbidden.
错误码:AccessDenied.
如果Expires时间格式错误,返回403Forbidden.
错误码:AccessDenied.
如果URL中包含参数Signature,Expires,OSSAccessKeyId中的一个或者多个,并且Head中也包含签名消息,返回消息400BadRequest.
错误码:InvalidArgument.
生成签名字符串时,除Date被替换成Expires参数外,仍然包含content-type、content-md5等上节中定义的Header.
(请求中虽然仍然有Date这个请求头,但不需要将Date加入签名字符串中)STS介绍OSS可以通过阿里云STS服务,临时进行授权访问.
阿里云STS(SecurityTokenService)是为云计算用户提供临时访问令牌的Web服务.
通过STS,您可以为第三方应用或联邦用户(用户身份由您自己管理)颁发一个自定义时效和权限的访问凭证.
第三方应用或联邦用户可以使用该访问凭证直接调用阿里云产品API,或者使用阿里云产品提供的SDK来访问云产品API.
您不需要透露您的长期密钥(AccessKey)给第三方应用,只需要生成一个访问令牌并将令牌交给第三方应用即可.
这个令牌的访问权限及有效期限都可以由您自定义.
您不需要关心权限撤销问题,访问令牌过期后就自动失效.
以app应用为例,交互流程如下图:SDKURL签名方法实现文件JavaSDKOSSClient.
generatePresignedUrlOSSClient.
javaPythonSDKBucket.
sign_urlapi.
py.
NetSDKOssClient.
GeneratePresignedUriOssClient.
csPHPSDKOssClient.
signUrlOssClient.
phpJavaScriptSDKsignatureUrlobject.
jsCSDKoss_gen_signed_urloss_object.
c对象存储OSSAPI参考101.
2.
3.
4.
5.
--qq方案的详细描述如下:App用户登录.
App用户身份是客户自己管理.
客户可以自定义身份管理系统,也可以使用外部Web账号或OpenID.
对于每个有效的App用户来说,AppServer是可以确切地定义出每个App用户的最小访问权限.
AppServer请求STS服务获取一个安全令牌(SecurityToken).
在调用STS之前,AppServer需要确定App用户的最小访问权限(用Policy语法描述)以及授权的过期时间.
然后通过调用STS的AssumeRole(扮演角色)接口来获取安全令牌.
角色管理与使用相关内容请参考RAM使用指南中的角色管理.
STS返回给AppServer一个有效的访问凭证,包括一个安全令牌(SecurityToken)、临时访问密钥(AccessKeyId、AccessKeySecret)以及过期时间.
AppServer将访问凭证返回给ClientApp.
ClientApp可以缓存这个凭证.
当凭证失效时,ClientApp需要向AppServer申请新的有效访问凭证.
比如,访问凭证有效期为1小时,那么ClientApp可以每30分钟向AppServer请求更新访问凭证.
ClientApp使用本地缓存的访问凭证去请求AlibabaCloudServiceAPI.
云服务会感知STS访问凭证,并会依赖STS服务来验证访问凭证,并正确响应用户请求.
STS安全令牌详情,请参考RAM使用指南中的角色管理.
关键是调用STS服务接口AssumeRole来获取有效访问凭证即可.
也可以直接使用STSSDK来调用该方法,点击查看.
使用STS凭证构造签名请求用户的客户端拿到STS临时凭证后,通过其中安全令牌(SecurityToken)以及临时访问密钥(AccessKeyId、AccessKeySecret)构建签名.
授权访问签名的构建方式与直接使用根账号的AccessKey在Header中包含签名基本一致,关键注意两点:用户使用的签名密钥为STS提供的临时访问密钥(AccessKeyId、AccessKeySecret).
用户需要将安全令牌(SecurityToken)携带在请求header中或者以请求参数的形式放入URI中.
这两种形式只能选择其一,如果都选择,OSS会返回InvalidArgument错误.
在header中包含头部x-oss-security-token:SecurityToken.
计算签名CanonicalizedOSSHeaders时,将x-oss-security-token计算在内.
在URL中携带参数security-token=SecurityToken.
计算签名CanonicalizedResource时,将security-token当做一个sub-resource计算在内.
对象存储OSSAPI参考11---Bucket权限控制OSS提供ACL(AccessControlList)权限控制方法,OSSACL提供Bucket级别的权限访问控制,Bucket目前有三种访问权限:public-read-write,public-read和private,它们的含义如下:public-read-write:任何人(包括匿名访问)都可以对该bucket中的object进行PUT,Get和Delete操作;所有这些操作产生的费用由该bucket的创建者承担,请慎用该权限.
public-read:只有该bucket的创建者可以对该bucket内的Object进行写操作(包括Put和DeleteObject);任何人(包括匿名访问)可以对该bucket中的object进行读操作(GetObject).
private:只有该bucket的创建者可以对该bucket内的Object进行读写操作(包括Put、Delete和GetObject);其他人无法访问该Bucket内的Object.
用户新创建一个新Bucket时,如果不指定Bucket权限,OSS会自动为该Bucket设置private权限.
对于一个已经存在的Bucket,只有它的创建者可以通过OSS的PutBucketAcl接口修改该Bucket的权限.
公共HTTP头定义公共请求头(CommonRequestHeaders)OSS的RESTful接口中使用了一些公共请求头.
这些请求头可以被所有的OSS请求所使用,其详细定义如下:名称描述Authorization用于验证请求合法性的认证信息.
类型:字符串默认值:无使用场景:非匿名请求Content-LengthRFC2616中定义的HTTP请求内容长度.
类型:字符串默认值:无使用场景:需要向OSS提交数据的请求Content-TypeRFC2616中定义的HTTP请求内容类型.
类型:字符串默认值:无使用场景:需要向OSS提交数据的请求DateHTTP1.
1协议中规定的GMT时间,例如:Wed,05Sep.
201223:00:00GMT类型:字符串默认值:无Host访问Host值,格式为:.
oss-cn-hangzhou.
aliyuncs.
com.
类型:字符串默认值:无对象存储OSSAPI参考12公共响应头(CommonResponseHeaders)OSS的RESTful接口中使用了一些公共响应头.
这些响应头可以被所有的OSS请求所使用,其详细定义如下:关于Service操作GetService(ListBuckets)对于服务地址作Get请求可以返回请求者拥有的所有Bucket,其中"/"表示根目录.
名称描述Content-LengthRFC2616中定义的HTTP请求内容长度.
类型:字符串默认值:无使用场景:需要向OSS提交数据的请求Connection标明客户端和OSS服务器之间的链接状态.
类型:枚举有效值:open、close默认值:无DateHTTP1.
1协议中规定的GMT时间,例如:Wed,05Sep.
201223:00:00GMT类型:字符串默认值:无ETagETag(entitytag)在每个Object生成的时候被创建,用于标示一个Object的内容.
对于PutObject请求创建的Object,ETag值是其内容的MD5值;对于其他方式创建的Object,ETag值是其内容的UUID.
ETag值可以用于检查Object内容是否发生变化.
类型:字符串默认值:无Server生成Response的服务器.
类型:字符串默认值:AliyunOSSx-oss-request-idx-oss-request-id是由AliyunOSS创建,并唯一标识这个response的UUID.
如果在使用OSS服务时遇到问题,可以凭借该字段联系OSS工作人员,快速定位问题.
类型:字符串默认值:无对象存储OSSAPI参考13请求语法请求参数GetService(ListBuckets)时,可以通过prefix,marker和max-keys对list做限定,返回部分结果.
响应元素(ResponseElements)GET/HTTP/1.
1Host:oss.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述prefix限定返回的bucketname必须以prefix作为前缀,可以不设定,不设定时不过滤前缀信息数据类型:字符串默认值:无marker设定结果从marker之后按字母排序的第一个开始返回,可以不设定,不设定时从头开始返回数据类型:字符串默认值:无max-keys限定此次返回bucket的最大数,如果不设定,默认为100,max-keys取值不能大于1000数据类型:字符串默认值:100名称描述ListAllMyBucketsResult保存GetService请求结果的容器.
类型:容器子节点:Owner,Buckets父节点:NonePrefix本次查询结果的前缀,当bucket未全部返回时才有此节点类型:字符串父节点:ListAllMyBucketsResultMarker标明这次GetService(ListBuckets)的起点,当bucket未全部返回时才有此节点类型:字符串父节点:ListAllMyBucketsResultMaxKeys响应请求内返回结果的最大数目,当bucket未全部返回时才有此节点类型:字符串父节点:ListAllMyBucketsResultIsTruncated指明是否所有的结果都已经返回:"true"表示本对象存储OSSAPI参考14次没有返回全部结果;"false"表示本次已经返回了全部结果.
当bucket未全部返回时才有此节点.
类型:枚举字符串有效值:true、false父节点:ListAllMyBucketsResultNextMarker表示下一次GetService(ListBuckets)可以以此为marker,将未返回的结果返回.
当bucket未全部返回时才有此节点.
类型:字符串父节点:ListAllMyBucketsResultOwner用于存放Bucket拥有者信息的容器.
类型:容器父节点:ListAllMyBucketsResultIDBucket拥有者的用户ID.
类型:字符串父节点:ListAllMyBucketsResult.
OwnerDisplayNameBucket拥有者的名称(目前和ID一致).
类型:字符串父节点:ListAllMyBucketsResult.
OwnerBuckets保存多个Bucket信息的容器.
类型:容器子节点:Bucket父节点:ListAllMyBucketsResultBucket保存bucket信息的容器.
类型:容器子节点:Name,CreationDate,Location父节点:ListAllMyBucketsResult.
BucketsNameBucket名称.
类型:字符串父节点:ListAllMyBucketsResult.
Buckets.
BucketCreateDateBucket创建时间类型:时间(格式:yyyy-mm-ddThh:mm:ss.
timezone,e.
g.
,2011-12-01T12:27:13.
000Z)父节点:ListAllMyBucketsResult.
Buckets.
BucketLocationBucket所在的数据中心类型:字符串父节点:ListAllMyBucketsResult.
Buckets.
BucketExtranetEndpointBucket访问的外网域名类型:字符串父节点:ListAllMyBucketsResult.
Buckets.
BucketIntranetEndpoint同区域ECS访问Bucket的内网域名类型:字符串父节点:ListAllMyBucketsResult.
Buckets.
Bucket对象存储OSSAPI参考151.
2.
3.
细节分析GetService这个API只对验证通过的用户有效.
如果请求中没有用户验证信息(即匿名访问),返回403Forbidden.
错误码:AccessDenied.
当所有的bucket都返回时,返回的xml中不包含Prefix、Marker、MaxKeys、IsTruncated、NextMarker节点,如果还有部分结果未返回,则增加上述节点,其中NextMarker用于继续查询时给marker赋值.
示例请求示例Ⅰ返回示例ⅠStorageClassBucket存储类型,支持"Standard"、"IA"、"Archive".
(目前只有部分区域支持"Archive"类型)类型:字符串父节点:ListAllMyBucketsResult.
Buckets.
BucketGET/HTTP/1.
1Date:Thu,15May201411:18:32GMTHost:oss-cn-hangzhou.
aliyuncs.
comAuthorization:OSSnxj7dtl1c24jwhcyl5hpvnhi:COS3OQkfQPnKmYZTEHYv2qUl5jI=HTTP/1.
1200OKDate:Thu,15May201411:18:32GMTContent-Type:application/xmlContent-Length:556Connection:keep-aliveServer:AliyunOSSx-oss-request-id:5374A2880232A65C23002D7451264512642015-12-17T18:12:43.
000Zoss-cn-shanghai.
aliyuncs.
comoss-cn-shanghai-internal.
aliyuncs.
comoss-cn-shanghaiapp-base-ossStandard对象存储OSSAPI参考16请求示例Ⅱ返回示例Ⅱ2014-12-25T11:21:04.
000Zoss-cn-hangzhou.
aliyuncs.
comoss-cn-hangzhou-internal.
aliyuncs.
comoss-cn-hangzhouatestleo23IAGET/prefix=xz02tphky6fjfiuc&max-keys=1HTTP/1.
1Date:Thu,15May201411:18:32GMTHost:oss-cn-hangzhou.
aliyuncs.
comAuthorization:OSSnxj7dtl1c24jwhcyl5hpvnhi:COS3OQkfQPnKmYZTEHYv2qUl5jI=HTTP/1.
1200OKDate:Thu,15May201411:18:32GMTContent-Type:application/xmlContent-Length:545Connection:keep-aliveServer:AliyunOSSx-oss-request-id:5374A2880232A65C23002D75xz02tphky6fjfiuc1truexz02tphky6fjfiuc0ut_test_put_bucketut_test_put_bucket2014-05-15T11:18:32.
000Zoss-cn-hangzhou.
aliyuncs.
comoss-cn-hangzhou-internal.
aliyuncs.
comoss-cn-hangzhouxz02tphky6fjfiuc0Standard对象存储OSSAPI参考171.
2.
3.
4.
5.
6.
7.
8.
关于Bucket的操作PutBucketPutBucket用于创建Bucket(不支持匿名访问).
创建的Bucket所在的Region和发送请求的Endpoint所对应的Region一致.
Bucket所在的数据中心确定后,该Bucket下的所有Object将一直存放在对应的地区.
更多内容参见Bucket和数据中心.
请求语法细节分析可以Put请求中的x-oss-acl头来设置Bucket访问权限.
目前Bucket有三种访问权限:public-read-write,public-read和private.
如果请求的Bucket已经存在,并且请求者是所有者,返回200OK成功.
如果请求的Bucket已经存在,但是不是请求者所拥有的,返回409Conflict.
错误码:BucketAlreadyExists.
如果想创建的Bucket不符合命名规范,返回400BadRequest消息.
错误码:InvalidBucketName.
如果用户发起PUTBucket请求的时候,没有传入用户验证信息,返回403Forbidden消息.
错误码:AccessDenied.
如果PutBucket的时候发现已经超过bucket最大创建数时,默认30个,返回400BadRequest消息.
错误码:TooManyBuckets.
创建的Bucket,如果没有指定访问权限,则默认使用Private权限.
创建的Bucket,可以指定Bucket的存储类型,可选值为Standard和IA、Archive.
示例请求示例:PUT/HTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDatex-oss-acl:PermissionAuthorization:SignatureValueStandard对象存储OSSAPI参考181.
2.
3.
返回示例:PutBucketAclPutBucketACL接口用于修改Bucket访问权限.
目前Bucket有三种访问权限:public-read-write,public-read和private.
PutBucketACL操作通过Put请求中的"x-oss-acl"头来设置.
这个操作只有该Bucket的创建者有权限执行.
如果操作成功,则返回200;否则返回相应的错误码和提示信息.
请求语法细节分析如果bucket存在,发送时带的权限和已有权限不一样,并且请求发送者是bucket拥有者时.
该请求不会改变bucket内容,但是会更新权限.
如果用户发起PutBucket请求的时候,没有传入用户验证信息,返回403Forbidden消息.
错误码:AccessDenied.
如果请求中没有,"x-oss-acl"头,并且该bucket已存在,并属于该请求发起者,则维持原PUT/HTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201703:15:40GMTx-oss-acl:privateAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:77Dvh5wQgIjWjwO/KyRt8dOPfo8=StandardHTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,24Feb201703:15:40GMTLocation:/oss-exampleContent-Length:0Connection:keep-aliveServer:AliyunOSSPUT/aclHTTP/1.
1x-oss-acl:PermissionHost:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue对象存储OSSAPI参考19bucket权限不变.
示例请求示例:返回示例:如果该设置的权限不存在,示例400BadRequest消息:错误返回示例:PutBucketLoggingOSS提供Bucket访问日志的目的是为了方便bucket的拥有者理解和分析bucket的访问行为.
OSS提供的PUT/aclHTTP/1.
1x-oss-acl:public-readHost:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201203:21:12GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=HTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,24Feb201203:21:12GMTContent-Length:0Connection:keep-aliveServer:AliyunOSSHTTP/1.
1400BadRequestx-oss-request-id:56594298207FB304438516F9Date:Fri,24Feb201203:55:00GMTContent-Length:309Content-Type:text/xml;charset=UTF-8Connection:keep-aliveServer:AliyunOSSInvalidArgumentnosuchbucketaccesscontrolexists56594298207FB304438516F9leo.
oss-test.
aliyun-inc.
comx-oss-aclerror-acl对象存储OSSAPI参考20Bucket访问日志不保证记录下每一条访问记录.
Bucket的拥有者可以为bucket开启访问日志记录功能.
这个功能开启后,OSS将自动记录访问这个bucket请求的详细信息,并按照用户指定的规则,以小时为单位,将访问日志作为一个Object写入用户指定的bucket.
OSS提供Bucket访问日志的目的是为了方便bucket的拥有者理解和分析bucket的访问行为.
OSS提供的Bucket访问日志不保证记录下每一条访问记录.
请求语法请求元素(RequestElements)PUT/loggingHTTP/1.
1Date:GMTDateContent-Length:ContentLengthContent-Type:application/xmlAuthorization:SignatureValueHost:BucketName.
oss-cn-hangzhou.
aliyuncs.
comTargetBucketTargetPrefix名称描述是否必需BucketLoggingStatus访问日志状态信息的容器类型:容器子元素:LoggingEnabled父元素:无是LoggingEnabled访问日志信息的容器.
这个元素在开启时需要,关闭时不需要.
类型:容器子元素:TargetBucket,TargetPrefix父元素:BucketLoggingStatus否TargetBucket指定存放访问日志的Bucket.
类型:字符子元素:无父元素:BucketLoggingStatus.
LoggingEnabled在开启访问日志的时候必需TargetPrefix指定最终被保存的访问日志文件前缀.
类型:字符子元素:None父元素:否对象存储OSSAPI参考21存储访问日志记录的object命名规则命名规则中,TargetPrefix由用户指定;YYYY,mm,DD,HH,MM和SS分别是该Object被创建时的阿拉伯数字的年,月,日,小时,分钟和秒(注意位数);UniqueString为OSS系统生成的字符串.
一个实际的用于存储OSS访问日志的Object名称例子如下:上例中,"MyLog-"是用户指定的Object前缀;"oss-example"是源bucket的名称;"2012-09-10-04-00-00"是该Object被创建时的北京时间;"0000"是OSS系统生成的字符串.
LOG文件格式BucketLoggingStatus.
LoggingEnabled-YYYY-mm-DD-HH-MM-SS-UniqueStringMyLog-oss-example-2012-09-10-04-00-00-0000名称例子含义RemoteIP119.
140.
142.
11请求发起的IP地址(Proxy代理或用户防火墙可能会屏蔽该字段)Reserved-保留字段Reserved-保留字段Time[02/May/2012:00:00:04+0800]OSS收到请求的时间Request-URI"GET/aliyun-logo.
pngHTTP/1.
1"用户请求的URI(包括query-string)HTTPStatus200OSS返回的HTTP状态码SentBytes5576用户从OSS下载的流量RequestTime(ms)71完成本次请求的时间(毫秒)Refererhttp://www.
aliyun.
com/product/oss请求的HTTPRefererUser-Agentcurl/7.
15.
5HTTP的User-Agent头HostNameoss-example.
oss-cn-hangzhou.
aliyuncs.
com请求访问域名RequestID505B01695037C2AF032593A4用于唯一标示该请求的UUIDLoggingFlagtrue是否开启了访问日志功能对象存储OSSAPI参考221.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
细节分析源Bucket和目标Bucket必须属于同一个用户.
上面所示的请求语法中,"BucketName"表示要开启访问日志记录的bucket;"TargetBucket"表示访问日志记录要存入的bucket;"TargetPrefix"表示存储访问日志记录的object名字前缀,可以为空.
源bucket和目标bucket可以是同一个Bucket,也可以是不同的Bucket;用户也可以将多个的源bucket的LOG都保存在同一个目标bucket内(建议指定不同的TargetPrefix).
当关闭一个Bucket的访问日志记录功能时,只要发送一个空的BucketLoggingStatus即可,具体方法可以参考下面的请求示例.
所有PUTBucketLogging请求必须带签名,即不支持匿名访问.
如果PUTBucketLogging请求发起者不是源bucket(请求示例中的BucketName)的拥有者,OSS返回403错误码;如果源bucket不存在,OSS返回错误码:NoSuchBucket.
如果PUTBucketLogging请求发起者不是目标bucket(请求示例中的TargetBucket)的拥有者,OSS返回403;如果目标bucket不存在,OSS返回错误码:InvalidTargetBucketForLogging.
源Bucket和目标Bucket必须属于同一个数据中心,否则返回400错误,错误码为:InvalidTargetBucketForLogging.
PUTBucketLogging请求中的XML不合法,返回错误码:MalformedXML.
源bucket和目标bucket可以是同一个Bucket;用户也可以将不同的源bucket的LOG都保存在同一个目标bucket内(注意要指定不同的TargetPrefix).
源Bucket被删除时,对应的Logging规则也将被删除.
OSS以小时为单位生成bucket访问的Log文件,但并不表示这个小时的所有请求都记录在这个小时RequesterAliyunID1657136103983691请求者的阿里云ID;匿名访问为"-"OperationGetObject请求类型Bucketoss-example请求访问的Bucket名字Key/aliyun-logo.
png用户请求的KeyObjectSize5576Object大小ServerCostTime(ms)17OSS服务器处理本次请求所花的时间(毫秒)ErrorCodeNoSuchBucketOSS返回的错误码RequestLength302用户请求的长度(Byte)UserID1657136103983691Bucket拥有者IDDeltaDataSize280Bucket大小的变化量;若没有变化为"-"SyncRequest-是否是CDN回源请求;若不是为"-"Reserved-保留字段对象存储OSSAPI参考2314.
15.
16.
17.
18.
19.
的LOG文件内,也有可能出现在上一个或者下一个LOG文件中.
OSS生成的Log文件命名规则中的"UniqueString"仅仅是OSS为其生成的UUID,用于唯一标识该文件.
OSS生成一个bucket访问的Log文件,算作一次PUT操作,并记录其占用的空间,但不会记录产生的流量.
LOG生成后,用户可以按照普通的Object来操作这些LOG文件.
OSS会忽略掉所有以"x-"开头的query-string参数,但这个query-string会被记录在访问LOG中.
如果你想从海量的访问日志中,标示一个特殊的请求,可以在URL中添加一个"x-"开头的query-string参数.
如:http://oss-example.
oss-cn-hangzhou.
aliyuncs.
com/aliyun-logo.
pnghttp://oss-example.
oss-cn-hangzhou.
aliyuncs.
com/aliyun-logo.
pngx-user=adminOSS处理上面两个请求,结果是一样的.
但是在访问LOG中,你可以通过搜索"x-user=admin",很方便地定位出经过标记的这个请求.
OSS的LOG中的任何一个字段,都可能出现"-",用于表示未知数据或对于当前请求该字段无效.
根据需求,OSS的LOG格式将来会在尾部添加一些字段,请开发者开发Log处理工具时考虑兼容性的问题.
如果用户上传了Content-MD5请求头,OSS会计算body的Content-MD5并检查一致性,如果不一致,将返回InvalidDigest错误码.
示例开启bucket访问日志的请求示例:返回示例:关闭bucket访问日志的请求示例:PUT/loggingHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comContent-Length:186Date:Fri,04May201203:21:12GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=doc-logMyLog-HTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,04May201203:21:12GMTContent-Length:0Connection:keep-aliveServer:AliyunOSS对象存储OSSAPI参考24返回示例:PutBucketWebsitePutBucketWebsite操作可以将一个bucket设置成静态网站托管模式.
请求语法请求元素(RequestElements)PUT/loggingHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comContent-Type:application/xmlContent-Length:86Date:Fri,04May201204:21:12GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=HTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,04May201204:21:12GMTContent-Length:0Connection:keep-aliveServer:AliyunOSSPUT/websiteHTTP/1.
1Date:GMTDateContent-Length:ContentLengthContent-Type:application/xmlHost:BucketName.
oss-cn-hangzhou.
aliyuncs.
comAuthorization:SignatureValueindex.
htmlerrorDocument.
html名称描述是否必须对象存储OSSAPI参考251.
2.
3.
4.
5.
6.
细节分析所谓静态网站是指所有的网页都由静态内容构成,包括客户端执行的脚本,例如JavaScript;OSS不支持涉及到需要服务器端处理的内容,例如PHP,JSP,APS.
NET等.
如果你想使用自己的域名来访问基于bucket的静态网站,可以通过域名CNAME来实现.
具体配置方法见3.
4节:自定义域名绑定.
用户将一个bucket设置成静态网站托管模式时,必须指定索引页面,错误页面则是可选的.
用户将一个bucket设置成静态网站托管模式时,指定的索引页面和错误页面是该bucket内的一个object.
在将一个bucket设置成静态网站托管模式后,对静态网站根域名的匿名访问,OSS将返回索引页面;对静态网站根域名的签名访问,OSS将返回GetBucket结果.
如果用户上传了Content-MD5请求头,OSS会计算body的Content-MD5并检查一致性,如果不一致,将返回InvalidDigest错误码.
示例请求示例:ErrorDocument子元素Key的父元素类型:容器父元素:WebsiteConfiguration否IndexDocument子元素Suffix的父元素.
类型:容器父元素:WebsiteConfiguration是Key返回404错误时使用的文件名类型:字符串父元素:WebsiteConfiguration.
ErrorDocument有条件:当ErrorDocument设置时,必需有条件Suffix返回目录URL时添加的索引文件名,不要为空,也不要包含"/".
例如索引文件设置为index.
html,则访问:oss-cn-hangzhou.
aliyuncs.
com/mybucket/mydir/这样请求的时候默认都相当于访问oss-cn-hangzhou.
aliyuncs.
com/mybucket/index.
html类型:字符串父元素:WebsiteConfiguration.
IndexDocument是WebsiteConfiguration请求的容器类型:容器父元素:无是对象存储OSSAPI参考26返回示例:PutBucketRefererPutBucketReferer操作可以设置一个bucket的referer访问白名单和是否允许referer字段为空的请求访问.
BucketReferer防盗链具体见OSS防盗链.
请求语法PUT/websiteHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comContent-Length:209Date:Fri,04May201203:21:12GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=index.
htmlerror.
htmlHTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,04May201203:21:12GMTContent-Length:0Connection:keep-aliveServer:AliyunOSSPUT/refererHTTP/1.
1Date:GMTDateContent-Length:ContentLengthContent-Type:application/xmlHost:BucketName.
oss.
aliyuncs.
comAuthorization:SignatureValuetruehttp://www.
aliyun.
comhttps://www.
aliyun.
comhttp://www.
*.
com对象存储OSSAPI参考271.
2.
3.
4.
请求元素(RequestElements)细节分析只有Bucket的拥有者才能发起PutBucketReferer请求,否则返回403Forbidden消息.
错误码:AccessDenied.
AllowEmptyReferer中指定的配置将替换之前的AllowEmptyReferer配置,该字段为必填项,系统中默认的AllowEmptyReferer配置为true.
此操作将用RefererList中的白名单列表覆盖之前配置的白名单列表,当用户上传的RefererList为空时(不包含Referer请求元素),此操作会覆盖已配置的白名单列表,即删除之前配置的RefererList.
如果用户上传了Content-MD5请求头,OSS会计算body的Content-MD5并检查一致性,如果不一致,将返回InvalidDigest错误码.
示例请求示例:不包含Referer的请求示例:https://www.
.
aliyuncs.
com名称描述是否必需RefererConfiguration保存Referer配置内容的容器类型:容器子节点:AllowEmptyReferer节点、RefererList节点父节点:无是AllowEmptyReferer指定是否允许referer字段为空的请求访问.
类型:枚举字符串有效值:true或false默认值:true父节点:RefererConfiguration是RefererList保存referer访问白名单的容器.
类型:容器父节点:RefererConfiguration子节点:Referer是Referer指定一条referer访问白名单.
类型:字符串父节点:RefererList可选对象存储OSSAPI参考28包含Referer的请求示例:返回示例:PutBucketLifecycleBucket的拥有者可以通过PutBucketLifecycle来设置Bucket的Lifecycle配置.
Lifecycle开启后,OSS将按照配置,定期自动删除与Lifecycle规则相匹配的Object.
请求语法PUT/refererHTTP/1.
1Host:oss-example.
oss.
aliyuncs.
comContent-Length:247Date:Fri,04May201203:21:12GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=truePUT/refererHTTP/1.
1Host:oss-example.
oss.
aliyuncs.
comContent-Length:247Date:Fri,04May201203:21:12GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=truehttp://www.
aliyun.
comhttps://www.
aliyun.
comhttp://www.
*.
comhttps://www.
.
aliyuncs.
comHTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,04May201203:21:12GMTContent-Length:0Connection:keep-aliveServer:AliyunOSS对象存储OSSAPI参考29请求元素(RequestElements)PUT/lifecycleHTTP/1.
1Date:GMTDateContent-Length:ContentLengthContent-Type:application/xmlAuthorization:SignatureValueHost:BucketName.
oss.
aliyuncs.
comRuleIDPrefixStatusDaysDays名称描述是否必需CreatedBeforeDate指定规则何时之前生效.
日期必需服从ISO8601的格式,并且总是UTC的零点.
例如:2002-10-11T00:00:00.
000Z类型:字符串父节点:Expiration或者AbortMultipartUploadDays和CreatedBeforeDate二选一Days指定规则在对象最后修改时间过后多少天生效.
类型:正整数父节点:ExpirationDays和CreatedBeforeDate二选一Expiration指定Object规则的过期属性.
类型:容器子节点:Days或CreatedBeforeDate父节点:Rule否AbortMultipartUpload指定未完成的Part规则的过期属性.
类型:容器子节点:Days或CreatedBeforeDate父节点:Rule否ID规则唯一的ID.
最多由255字节组成.
当用户没有指定,或者该值为空时,OSS会为用户生成一个唯一值.
否对象存储OSSAPI参考301.
2.
3.
细节分析只有Bucket的拥有者才能发起PutBucketLifecycle请求,否则返回403Forbidden消息.
错误码:AccessDenied.
如果此前没有设置过Lifecycle,此操作会创建一个新的Lifecycle配置;否则,就覆写先前的配置.
可以对Object设置过期时间,也可以对Part设置过期时间.
这里的Part指的是以分片上传方式上传,但最后未提交的分片.
示例请求示例:类型:字符串子节点:无父节点:RuleLifecycleConfigurationLifecycle配置的容器,最多可容纳1000条规则.
类型:容器子节点:Rule父节点:无是Prefix指定规则所适用的前缀.
只有匹配前缀的对象才可能被该规则所影响.
不可重叠.
类型:字符串子节点:无父节点:Rule是Rule表述一条规则类型:容器子节点:ID,Prefix,Status,Expiration父节点:LifecycleConfiguration是Status如果其值为Enabled,那么OSS会定期执行该规则;如果是Disabled,那么OSS会忽略该规则.
类型:字符串父节点:Rule有效值:Enabled,Disabled是PUT/lifecycleHTTP/1.
1Host:oss-example.
oss.
aliyuncs.
comContent-Length:443Date:Mon,14Apr201401:08:38GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=对象存储OSSAPI参考31返回示例:GetBucket(ListObject)GetBucket操作可用来listBucket中所有Object的信息.
请求语法deleteobjectsandpartsafteronedaylogs/Enabled11deletecreatedbeforedatebackup/Enabled2014-10-11T00:00:00.
000Z2014-10-11T00:00:00.
000ZHTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Mon,14Apr201401:17:10GMTContent-Length:0Connection:keep-aliveServer:AliyunOSSGET/HTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue对象存储OSSAPI参考32请求参数(RequestParameters)GetBucket(ListObject)时,可以通过prefix,marker,delimiter和max-keys对list做限定,返回部分结果.
另外,可以通过encoding-type对返回结果中的Delimiter、Marker、Prefix、NextMarker和Key这些元素进行编码.
响应元素(ResponseElements)名称描述delimiter是一个用于对Object名字进行分组的字符.
所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素——CommonPrefixes.
数据类型:字符串默认值:无marker设定结果从marker之后按字母排序的第一个开始返回.
数据类型:字符串默认值:无max-keys限定此次返回object的最大数,如果不设定,默认为100,max-keys取值不能大于1000.
数据类型:字符串默认值:100prefix限定返回的objectkey必须以prefix作为前缀.
注意使用prefix查询时,返回的key中仍会包含prefix.
数据类型:字符串默认值:无encoding-type指定对返回的内容进行编码,指定编码的类型.
Delimiter、Marker、Prefix、NextMarker和Key使用UTF-8字符,但xml1.
0标准不支持解析一些控制字符,比如ascii值从0到10的字符.
对于包含xml1.
0标准不支持的控制字符,可以通过指定encoding-type对返回的Delimiter、Marker、Prefix、NextMarker和Key进行编码.
数据类型:字符串默认值:无,可选值:url名称描述Contents保存每个返回Objectmeta的容器.
类型:容器父节点:ListBucketResultCommonPrefixes如果请求中指定了delimiter参数,则在OSS返回的响应中包含CommonPrefixes元素.
该元素标明那些以delimiter结尾,并有共同前缀的object名称的集合.
类型:字符串父节点:ListBucketResult对象存储OSSAPI参考33Delimiter是一个用于对Object名字进行分组的字符.
所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素——CommonPrefixes.
类型:字符串父节点:ListBucketResultEncodingType指明返回结果中编码使用的类型.
如果请求的参数中指定了encoding-type,那会对返回结果中的Delimiter、Marker、Prefix、NextMarker和Key这些元素进行编码.
类型:字符串父节点:ListBucketResultDisplayNameObject拥有者的名字.
类型:字符串父节点:ListBucketResult.
Contents.
OwnerETagETag(entitytag)在每个Object生成的时候被创建,用于标示一个Object的内容.
对于PutObject请求创建的Object,ETag值是其内容的MD5值;对于其他方式创建的Object,ETag值是其内容的UUID.
ETag值可以用于检查Object内容是否发生变化.
不建议用户使用ETag来作为Object内容的MD5校验数据完整性.
类型:字符串父节点:ListBucketResult.
ContentsIDBucket拥有者的用户ID.
类型:字符串父节点:ListBucketResult.
Contents.
OwnerIsTruncated指明是否所有的结果都已经返回;"true"表示本次没有返回全部结果;"false"表示本次已经返回了全部结果.
类型:枚举字符串有效值:true、false父节点:ListBucketResultKeyObject的Key.
类型:字符串父节点:ListBucketResult.
ContentsLastModifiedObject最后被修改的时间.
类型:时间父节点:ListBucketResult.
ContentsListBucketResult保存GetBucket请求结果的容器.
类型:容器子节点:Name,Prefix,Marker,MaxKeys,Delimiter,IsTruncated,Nextmarker,Contents父节点:NoneMarker标明这次GetBucket(ListObject)的起点.
类型:字符串父节点:ListBucketResultMaxKeys响应请求内返回结果的最大数目.
类型:字符串父节点:ListBucketResult对象存储OSSAPI参考341.
2.
3.
4.
5.
6.
7.
8.
-细节分析Object中用户自定义的meta,在GetBucket请求时不会返回.
如果访问的Bucket不存在,包括试图访问因为命名不规范无法创建的Bucket,返回404NotFound错误,错误码:NoSuchBucket.
如果没有访问该Bucket的权限,返回403Forbidden错误,错误码:AccessDenied.
如果因为max-keys的设定无法一次完成listing,返回结果会附加一个,提示继续listing可以以此为marker.
NextMarker中的值仍在list结果之中.
在做条件查询时,即使marker实际在列表中不存在,返回也从符合marker字母排序的下一个开始打印.
如果max-keys小于0或者大于1000,将返回400BadRequest错误.
错误码:InvalidArgument.
若prefix,marker,delimiter参数不符合长度要求,返回400BadRequest.
错误码:InvalidArgument.
prefix,marker用来实现分页显示效果,参数的长度必须小于1024字节.
如果把prefix设为某个文件夹名,就可以罗列以此prefix开头的文件,即该文件夹下递归的所有的文件和子文件夹.
如果再把delimiter设置为/时,返回值就只罗列该文件夹下的文件,该文件夹下的子文件名返回在CommonPrefixes部分,子文件夹下递归的文件和文件夹不被显示.
如一个bucket存在三个object:fun/test.
jpg,fun/movie/001.
avi,fun/movie/007.
avi.
若设定prefix为"fun/",则返回三个object;如果增加设定delimiter为"/",则返回文件"fun/test.
jpg"和前缀"fun/movie/";即实现了文件夹的逻辑.
举例场景在bucket"my_oss"内有4个object,名字分别为:oss.
jpgNameBucket名字类型:字符串父节点:ListBucketResultOwner保存Bucket拥有者信息的容器.
类型:容器子节点:DisplayName,ID父节点:ListBucketResultPrefix本次查询结果的开始前缀.
类型:字符串父节点:ListBucketResultSizeObject的字节数.
类型:字符串父节点:ListBucketResult.
ContentsStorageClassObject的存储类型,支持"Standard"、"IA"、"Archive".
(目前只有部分区域支持"Archive"类型)类型:字符串父节点:ListBucketResult.
Contents对象存储OSSAPI参考35---fun/test.
jpgfun/movie/001.
avifun/movie/007.
avi示例请求示例:返回示例:GET/HTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201208:43:27GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:BC+oQIXVR2/ZghT7cGa0ykboO4M=HTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,24Feb201208:43:27GMTContent-Type:application/xmlContent-Length:1866Connection:keep-aliveServer:AliyunOSSoss-example100falsefun/movie/001.
avi2012-02-24T08:43:07.
000Z"5B3C1A2E053D763E1B002CC607C5A0FE"Normal344606Standard00220120222user-examplefun/movie/007.
avi2012-02-24T08:43:27.
000Z"5B3C1A2E053D763E1B002CC607C5A0FE"Normal344606Standard00220120222对象存储OSSAPI参考36请求示例(含Prefix参数):返回示例:user-examplefun/test.
jpg2012-02-24T08:42:32.
000Z"5B3C1A2E053D763E1B002CC607C5A0FE"Normal344606Standard00220120222user-exampleoss.
jpg2012-02-24T06:07:48.
000Z"5B3C1A2E053D763E1B002CC607C5A0FE"Normal344606Standard00220120222user-exampleGET/prefix=funHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201208:43:27GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:BC+oQIXVR2/ZghT7cGa0ykboO4M=HTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,24Feb201208:43:27GMTContent-Type:application/xmlContent-Length:1464Connection:keep-aliveServer:AliyunOSSoss-examplefun100false对象存储OSSAPI参考37请求示例(含prefix和delimiter参数):返回示例:fun/movie/001.
avi2012-02-24T08:43:07.
000Z"5B3C1A2E053D763E1B002CC607C5A0FE"Normal344606Standard00220120222user_examplefun/movie/007.
avi2012-02-24T08:43:27.
000Z"5B3C1A2E053D763E1B002CC607C5A0FE"Normal344606Standard00220120222user_examplefun/test.
jpg2012-02-24T08:42:32.
000Z"5B3C1A2E053D763E1B002CC607C5A0FE"Normal344606Standard00220120222user_exampleGET/prefix=fun/&delimiter=/HTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201208:43:27GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:DNrnx7xHk3sgysx7I8U9I9IY1vY=HTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,24Feb201208:43:27GMTContent-Type:application/xmlContent-Length:712Connection:keep-aliveServer:AliyunOSS对象存储OSSAPI参考38GetBucketACLGetBucketACL用来获取某个Bucket的访问权限.
请求语法响应元素(ResponseElements)oss-examplefun/100/falsefun/test.
jpg2012-02-24T08:42:32.
000Z"5B3C1A2E053D763E1B002CC607C5A0FE"Normal344606Standard00220120222user_examplefun/movie/GET/aclHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述AccessControlList存储ACL信息的容器类型:容器父节点:AccessControlPolicyAccessControlPolicy保存GetBucketACL结果的容器类型:容器父节点:None对象存储OSSAPI参考391.
细节分析只有Bucket的拥有者才能使用GetBucketACL这个接口.
示例请求示例:返回示例:DisplayNameBucket拥有者的名称.
.
(目前和ID一致)类型:字符串父节点:AccessControlPolicy.
OwnerGrantBucket的ACL权限.
类型:枚举字符串有效值:private、public-read、public-read-write父节点:AccessControlPolicy.
AccessControlListIDBucket拥有者的用户ID类型:字符串父节点:AccessControlPolicy.
OwnerOwner保存Bucket拥有者信息的容器.
类型:容器父节点:AccessControlPolicyGET/aclHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201204:11:23GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:CTkuxpLAi4XZ+WwIfNm0FmgbrQ0=HTTP/1.
1200OKx-oss-request-id:534B371674E88A4D8906008BDate:Fri,24Feb201204:11:23GMTContent-Length:253Content-Tupe:application/xmlConnection:keep-aliveServer:AliyunOSS00220120222user_examplepublic-read对象存储OSSAPI参考401.
2.
GetBucketLocationGetBucketLocation用于查看Bucket所属的数据中心位置信息.
请求语法响应元素(ResponseElements)细节分析只有Bucket的拥有者才能查看Bucket的Location信息,否则返回403Forbidden错误,错误码:AccessDenied.
目前LocationConstraint有效值:oss-cn-hangzhou,oss-cn-qingdao,oss-cn-beijing,oss-cn-hongkong,oss-cn-shenzhen,oss-cn-shanghai,oss-us-west-1,oss-us-east-1,oss-ap-southeast-1;分别对应杭州数据中心,青岛数据中心,北京数据中心、香港数据中心、深圳数据中心、上海数据中心、美国硅谷数据中心、美国弗吉尼亚数据中心和亚太(新加坡)数据中心.
示例请求示例:已设置LOG规则的返回示例:GET/locationHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述LocationConstraintBucket所在的区域类型:字符串Values:oss-cn-hangzhou、oss-cn-qingdao、oss-cn-beijing、oss-cn-hongkong、oss-cn-shenzhen、oss-cn-shanghaiGet/locationHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,04May201205:31:04GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:ceOEyZavKY4QcjoUWYSpYbJ3naA=对象存储OSSAPI参考41-----GetBucketInfoGetBucketInfo操作用于查看bucket的相关信息.
包括如下内容:创建时间外网访问Endpoint内网访问Endpointbucket的拥有者信息bucket的ACL(AccessControlList)请求语法响应元素(ResponseElements)HTTP/1.
1200x-oss-request-id:534B371674E88A4D8906008BDate:Fri,15Mar201305:31:04GMTConnection:keep-aliveContent-Length:90Server:AliyunOSSoss-cn-hangzhouGET/bucketInfoHTTP/1.
1Host:BucketName.
oss.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述BucketInfo保存Bucket信息内容的容器类型:容器子节点:Bucket节点父节点:无Bucket保存Bucket具体信息的容器类型:容器父节点:BucketInfo节点CreationDateBucket创建时间.
时间格式2013-07-31T10:56:21.
000Z类型:时间父节点:BucketInfo.
BucketExtranetEndpointBucket访问的外网域名对象存储OSSAPI参考421.
2.
3.
细节分析如果Bucket不存在,返回404错误.
错误码:NoSuchBucket.
只有Bucket的拥有者才能查看Bucket的信息,否则返回403Forbidden错误,错误码:AccessDenied.
请求可以从任何一个OSS的Endpoint发起.
示例请求示例:类型:字符串父节点:BucketInfo.
BucketIntranetEndpoint同区域ECS访问Bucket的内网域名类型:字符串父节点:BucketInfo.
BucketLocationBucket所在数据中心的区域类型:字符串父节点:BucketInfo.
BucketNameBucket名字类型:字符串父节点:BucketInfo.
BucketOwner用于存放Bucket拥有者信息的容器.
类型:容器父节点:BucketInfo.
BucketIDBucket拥有者的用户ID.
类型:字符串父节点:BucketInfo.
Bucket.
OwnerDisplayNameBucket拥有者的名称(目前和ID一致).
类型:字符串父节点:BucketInfo.
Bucket.
OwnerAccessControlList存储ACL信息的容器类型:容器父节点:BucketInfo.
BucketGrantBucket的ACL权限.
类型:枚举字符串有效值:private、public-read、public-read-write父节点:BucketInfo.
Bucket.
AccessControlList对象存储OSSAPI参考43成功获取Bucket信息的返回示例:获取不存在的Bucket信息的返回示例:获取没有权限访问的Bucket信息的返回示例:Get/bucketInfoHTTP/1.
1Host:oss-example.
oss.
aliyuncs.
comDate:Sat,12Sep201507:51:28GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:BuG4rRK+zNhH1AcF51NNHD39zXw=HTTP/1.
1200x-oss-request-id:534B371674E88A4D8906008BDate:Sat,12Sep201507:51:28GMTConnection:keep-aliveContent-Length:531Server:AliyunOSS2013-07-31T10:56:21.
000Zoss-cn-hangzhou.
aliyuncs.
comoss-cn-hangzhou-internal.
aliyuncs.
comoss-cn-hangzhouoss-exampleusername271834739143143privateHTTP/1.
1404x-oss-request-id:534B371674E88A4D8906009BDate:Sat,12Sep201507:51:28GMTConnection:keep-aliveContent-Length:308Server:AliyunOSSNoSuchBucketThespecifiedbucketdoesnotexist.
568D547F31243C673BA14274nosuchbucket.
oss.
aliyuncs.
comnosuchbucket对象存储OSSAPI参考44GetBucketLoggingGetBucketLogging用于查看Bucket的访问日志配置情况.
请求语法响应元素(ResponseElements)HTTP/1.
1403x-oss-request-id:534B371674E88A4D8906008CDate:Sat,12Sep201507:51:28GMTConnection:keep-aliveContent-Length:209Server:AliyunOSSAccessDeniedAccessDenied568D5566F2D0F89F5C0EB66Etest.
oss.
aliyuncs.
comGET/loggingHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述BucketLoggingStatus访问日志状态信息的容器类型:容器子元素:LoggingEnabled父元素:无LoggingEnabled访问日志信息的容器.
这个元素在开启时需要,关闭时不需要.
类型:容器子元素:TargetBucket,TargetPrefix父元素:BucketLoggingStatusTargetBucket指定存放访问日志的Bucket.
类型:字符子元素:无父元素:BucketLoggingStatus.
LoggingEnabledTargetPrefix指定最终被保存的访问日志文件前缀.
类型:字符子元素:None对象存储OSSAPI参考451.
2.
3.
细节分析如果Bucket不存在,返回404nocontent错误.
错误码:NoSuchBucket.
只有Bucket的拥有者才能查看Bucket的访问日志配置情况,否则返回403Forbidden错误,错误码:AccessDenied.
如果源Bucket未设置Logging规则,OSS仍然返回一个XML消息体,但其中的BucketLoggingStatus元素为空.
示例请求示例:已设置LOG规则的返回示例:未设置LOG规则的返回示例:父元素:BucketLoggingStatus.
LoggingEnabledGet/loggingHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,04May201205:31:04GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:ceOEyZavKY4QcjoUWYSpYbJ3naA=HTTP/1.
1200x-oss-request-id:534B371674E88A4D8906008BDate:Fri,04May201205:31:04GMTConnection:keep-aliveContent-Length:210Server:AliyunOSSmybucketlogsmybucket-access_log/HTTP/1.
1200x-oss-request-id:534B371674E88A4D8906008BDate:Fri,04May201205:31:04GMTConnection:keep-aliveContent-Length:110Server:AliyunOSS对象存储OSSAPI参考461.
GetBucketWebsiteGetBucketWebsite操作用于查看bucket的静态网站托管状态.
请求语法响应元素(ResponseElements)细节分析如果Bucket不存在,返回404nocontent错误.
错误码:NoSuchBucket.
GET/websiteHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述ErrorDocument子元素Key的父元素类型:容器父元素:WebsiteConfigurationIndexDocument子元素Suffix的父元素.
类型:容器父元素:WebsiteConfigurationKey返回404错误时使用的文件名类型:字符串父元素:WebsiteConfiguration.
ErrorDocument有条件:当ErrorDocument设置时,必需Suffix返回目录URL时添加的索引文件名,不要为空,也不要包含"/".
例如索引文件设置为index.
html,则访问:oss-cn-hangzhou.
aliyuncs.
com/mybucket/mydir/这样请求的时候默认都相当于访问oss-cn-hangzhou.
aliyuncs.
com/mybucket/index.
html类型:字符串父元素:WebsiteConfiguration.
IndexDocumentWebsiteConfiguration请求的容器类型:容器父元素:无对象存储OSSAPI参考472.
3.
只有Bucket的拥有者才能查看Bucket的静态网站托管状态,否则返回403Forbidden错误,错误码:AccessDenied.
如果源Bucket未设置静态网站托管功能,OSS会返回404错误,错误码为:NoSuchWebsiteConfiguration.
示例请求示例:已设置LOG规则的返回示例:未设置LOG规则的返回示例Get/websiteHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Thu,13Sep201207:51:28GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:BuG4rRK+zNhH1AcF51NNHD39zXw=HTTP/1.
1200x-oss-request-id:534B371674E88A4D8906008BDate:Thu,13Sep201207:51:28GMTConnection:keep-aliveContent-Length:218Server:AliyunOSSindex.
htmlerror.
htmlHTTP/1.
1404x-oss-request-id:534B371674E88A4D8906008BDate:Thu,13Sep201207:56:46GMTConnection:keep-aliveContent-Length:308Server:AliyunOSSNoSuchWebsiteConfigurationThespecifiedbucketdoesnothaveawebsiteconfiguration.
oss-example505191BEC4689A033D00236Foss-example.
oss-cn-hangzhou.
aliyuncs.
com对象存储OSSAPI参考481.
2.
3.
GetBucketRefererGetBucketReferer操作用于查看bucket的Referer相关配置.
BucketReferer防盗链具体见OSS防盗链.
请求语法响应元素(ResponseElements)细节分析如果Bucket不存在,返回404错误.
错误码:NoSuchBucket.
只有Bucket的拥有者才能查看Bucket的Referer配置信息,否则返回403Forbidden错误,错误码:AccessDenied.
如果Bucket未进行Referer相关配置,OSS会返回默认的AllowEmptyReferer值和空的RefererList.
示例GET/refererHTTP/1.
1Host:BucketName.
oss.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述RefererConfiguration保存Referer配置内容的容器类型:容器子节点:AllowEmptyReferer节点、RefererList节点父节点:无AllowEmptyReferer指定是否允许referer字段为空的请求访问.
类型:枚举字符串有效值:true或false`默认值:true父节点:RefererConfigurationRefererList保存referer访问白名单的容器.
类型:容器父节点:RefererConfiguration子节点:RefererReferer指定一条referer访问白名单.
类型:字符串父节点:RefererList对象存储OSSAPI参考49请求示例:已设置Referer规则的返回示例:未设置Referer规则的返回示例:GetBucketLifecycleGetBucketLifecycle用于查看Bucket的Lifecycle配置.
Get/refererHTTP/1.
1Host:oss-example.
oss.
aliyuncs.
comDate:Thu,13Sep201207:51:28GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:BuG4rRK+zNhH1AcF51NNHD39zXw=HTTP/1.
1200x-oss-request-id:534B371674E88A4D8906008BDate:Thu,13Sep201207:51:28GMTConnection:keep-aliveContent-Length:218Server:AliyunOSStruehttp://www.
aliyun.
comhttps://www.
aliyun.
comhttp://www.
*.
comhttps://www.
.
aliyuncs.
comHTTP/1.
1200x-oss-request-id:534B371674E88A4D8906008BDate:Thu,13Sep201207:56:46GMTConnection:keep-aliveContent-Length:308Server:AliyunOSStrue对象存储OSSAPI参考501.
2.
请求语法细节分析只有Bucket的拥有者才能查看Bucket的Lifecycle配置,否则返回403Forbidden错误,错误码:AccessDenied.
如果Bucket或Lifecycle不存在,返回404NotFound错误,错误码:NoSuchBucket或NoSuchLifecycle.
示例请求示例:已设置Lifecycle的返回示例:未设置Lifecycle的返回示例:GET/lifecycleHTTP/1.
1Host:BucketName.
oss.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValueGet/lifecycleHTTP/1.
1Host:oss-example.
oss.
aliyuncs.
comDate:Mon,14Apr201401:17:29GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:ceOEyZavKY4QcjoUWYSpYbJ3naA=HTTP/1.
1200x-oss-request-id:534B371674E88A4D8906008BDate:Mon,14Apr201401:17:29GMTConnection:keep-aliveContent-Length:255Server:AliyunOSSdeleteafteronedaylogs/Enabled1对象存储OSSAPI参考511.
2.
3.
4.
DeleteBucketDeleteBucket用于删除某个Bucket.
请求语法细节分析如果Bucket不存在,返回404nocontent错误.
错误码:NoSuchBucket.
为了防止误删除的发生,OSS不允许用户删除一个非空的Bucket.
如果试图删除一个不为空的Bucket,返回409Conflict错误,错误码:BucketNotEmpty.
只有Bucket的拥有者才能删除这个Bucket.
如果试图删除一个没有对应权限的Bucket,返回403Forbidden错误.
错误码:AccessDenied.
示例请求示例:HTTP/1.
1404x-oss-request-id:534B371674E88A4D8906008BDate:Mon,14Apr201401:17:29GMTConnection:keep-aliveContent-Length:278Server:AliyunOSSoss-exampleNoSuchLifecycleNoRowfoundinLifecycleTable.
534B372974E88A4D89060099oss-example.
oss.
aliyuncs.
comDELETE/HTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValueDELETE/HTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201205:31:04GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:ceOEyZavKY4QcjoUWYSpYbJ3naA=对象存储OSSAPI参考521.
2.
3.
返回示例:DeleteBucketLoggingDeleteBucketLogging操作用于关闭bucket访问日志记录功能.
请求语法细节分析如果Bucket不存在,返回404nocontent错误,错误码:NoSuchBucket.
只有Bucket的拥有者才能关闭Bucket访问日志记录功能.
如果试图操作一个不属于你的Bucket,OSS返回403Forbidden错误,错误码:AccessDenied.
如果目标Bucket并没有开启Logging功能,仍然返回HTTP状态码204.
示例请求示例返回示例HTTP/1.
1204NoContentx-oss-request-id:534B371674E88A4D8906008BDate:Fri,24Feb201205:31:04GMTConnection:keep-aliveContent-Length:0Server:AliyunOSSDELETE/loggingHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValueDELETE/loggingHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201205:35:24GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:6ZVHOehYzxoC1yxRydPQs/CnMZU=HTTP/1.
1204NoContentx-oss-request-id:534B371674E88A4D8906008BDate:Fri,24Feb201205:35:24GMT对象存储OSSAPI参考531.
2.
DeleteBucketWebsiteDeleteBucketWebsite操作用于关闭bucket的静态网站托管模式.
请求语法细节分析如果Bucket不存在,返回404nocontent错误,错误码:NoSuchBucket.
只有Bucket的拥有者才能关闭Bucket的静态网站托管模式.
如果试图操作一个不属于你的Bucket,OSS返回403Forbidden错误,错误码:AccessDenied.
示例请求示例:返回示例:Connection:keep-aliveContent-Length:0Server:AliyunOSSDELETE/websiteHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValueDELETE/websiteHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201205:45:34GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:LnM4AZ1OeIduZF5vGFWicOMEkVg=HTTP/1.
1204NoContentx-oss-request-id:534B371674E88A4D8906008BDate:Fri,24Feb201205:45:34GMTConnection:keep-aliveContent-Length:0Server:AliyunOSS对象存储OSSAPI参考541.
2.
DeleteBucketLifecycle通过DeleteBucketLifecycle来删除指定Bucket的生命周期配置.
请求语法细节分析本操作会删除指定Bucket的所有的生命周期规则.
此后,该Bucket中不会有Object被自动删除.
只有Bucket的拥有者才能删除Bucket的Lifecycle配置.
如果试图操作一个不属于你的Bucket,OSS返回403Forbidden错误,错误码:AccessDenied.
示例请求示例:返回示例:关于Object操作DELETE/lifecycleHTTP/1.
1Host:BucketName.
oss.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValueDELETE/lifecycleHTTP/1.
1Host:oss-example.
oss.
aliyuncs.
comDate:Mon,14Apr201401:17:35GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:6ZVHOehYzxoC1yxRydPQs/CnMZU=HTTP/1.
1204NoContentx-oss-request-id:534B371674E88A4D8906008BDate:Mon,14Apr201401:17:35GMTConnection:keep-aliveContent-Length:0Server:AliyunOSS对象存储OSSAPI参考55PutObjectPutObject用于上传文件.
请求语法请求HeaderPUT/ObjectNameHTTP/1.
1Content-Length:ContentLengthContent-Type:ContentTypeHost:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述Cache-Control指定该Object被下载时的网页的缓存行为;更详细描述请参照RFC2616.
类型:字符串默认值:无Content-Disposition指定该Object被下载时的名称;更详细描述请参照RFC2616.
类型:字符串默认值:无Content-Encoding指定该Object被下载时的内容编码格式;更详细描述请参照RFC2616.
类型:字符串默认值:无Content-MD5根据协议RFC1864对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码为一个消息的Content-MD5值.
该请求头可用于消息合法性的检查(消息内容是否与发送时一致).
虽然该请求头是可选项,OSS建议用户使用该请求头进行端到端检查.
类型:字符串默认值:无限制:无Expires过期时间;更详细描述请参照RFC2616.
类型:字符串默认值:无注意:OSS不会对这个值进行限制和验证x-oss-server-side-encryption指定oss创建object时的服务器端加密编码算法.
类型:字符串合法值:AES256x-oss-object-acl指定oss创建object时的访问权限.
类型:字符串对象存储OSSAPI参考561.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
细节分析如果用户上传了Content-MD5请求头,OSS会计算body的Content-MD5并检查一致性,如果不一致,将返回InvalidDigest错误码.
如果请求头中的"Content-Length"值小于实际请求体(body)中传输的数据长度,OSS仍将成功创建文件;但Object大小只等于"Content-Length"中定义的大小,其他数据将被丢弃.
如果试图添加的Object的同名文件已经存在,并且有访问权限.
新添加的文件将覆盖原来的文件,成功返回200OK.
如果在PutObject的时候,携带以x-oss-meta-为前缀的参数,则视为usermeta,比如x-oss-meta-location.
一个Object可以有多个类似的参数,但所有的usermeta总大小不能超过8k.
如果Head中没有加入Contentlength参数,会返回411LengthRequired错误.
错误码:MissingContentLength.
如果设定了长度,但是没有发送消息Body,或者发送的body大小小于给定大小,服务器会一直等待,直到timeout,返回400BadRequest消息.
错误码:RequestTimeout.
如果试图添加的Object所在的Bucket不存在,返回404NotFound错误.
错误码:NoSuchBucket.
如果试图添加的Object所在的Bucket没有访问权限,返回403Forbidden错误.
错误码:AccessDenied.
如果添加文件长度超过5G,返回错误消息400BadRequest.
错误码:InvalidArgument.
如果传入的Objectkey长度大于1023字节,返回400BadRequest.
错误码:InvalidObjectName.
PUT一个Object的时候,OSS支持5个HTTPRFC2616协议规定的Header字段:Cache-Control、Expires、Content-Encoding、Content-Disposition、Content-Type.
如果上传Object时设置了这些Header,则这个Object被下载时,相应的Header值会被自动设置成上传时的值.
如果上传Object时指定了x-oss-server-side-encryptionHeader,则必须设置其值为AES256,否则会返回400和相应错误提示:InvalidEncryptionAlgorithmError.
指定该Header后,在响应头中也会返回该Header,OSS会对上传的Object进行加密编码存储,当这个Object被下载时,响应头中会包含x-oss-server-side-encryption,值被设置成该Object的加密算法.
常见问题Content-MD5计算方式错误合法值:public-read,private,public-read-write以上传的内容为"123456789"来说,计算这个字符串的Content-MD5正确的计算方式:标准中定义的算法简单点说就是:1.
先计算MD5加密的二进制数组(128位).
对象存储OSSAPI参考57示例请求示例:返回示例:2.
再对这个二进制进行base64编码(而不是对32位字符串编码).
以Python为例子:正确计算的代码为:>>>importbase64,hashlib>>>hash=hashlib.
md5()>>>hash.
update("0123456789")>>>base64.
b64encode(hash.
digest())'eB5eJF1ptWaXm4bijSPyxw=='需要注意正确的是:hash.
digest(),计算出进制数组(128位)>>>hash.
digest()'x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7'常见错误是直接对计算出的32位字符串编码进行base64编码.
例如,错误的是:hash.
hexdigest(),计算得到可见的32位字符串编码>>>hash.
hexdigest()'781e5e245d69b566979b86e28d23f2c7'错误的MD5值进行base64编码后的结果:>>>base64.
b64encode(hash.
hexdigest())'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='PUT/oss.
jpgHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comCache-control:no-cacheExpires:Fri,28Feb201205:38:42GMTContent-Encoding:utf-8Content-Disposition:attachment;filename=oss_download.
jpgDate:Fri,24Feb201206:03:28GMTContent-Type:image/jpgContent-Length:344606Authorization:OSSqn6qrrqxo2oawuk53otfjbyc:kZoYNv66bsmc10+dcGKw5x2PRrk=[344606bytesofobjectdata]HTTP/1.
1200OKServer:AliyunOSSDate:Sat,21Nov201518:52:34GMTContent-Length:0Connection:keep-alivex-oss-request-id:5650BD72207FB30443962F9Ax-oss-bucket-version:1418321259ETag:"A797938C31D59EDD08D86188F6D5B872"对象存储OSSAPI参考58CopyObject该操作适用于拷贝小于1GB的文件,当拷贝一个大于1GB的文件时,必须使用MultipartUpload操作,具体见UploadPartCopy.
请求语法请求HeaderPUT/DestObjectNameHTTP/1.
1Host:DestBucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValuex-oss-copy-source:/SourceBucketName/SourceObjectName名称描述x-oss-copy-source复制源地址(必须有可读权限)类型:字符串默认值:无x-oss-copy-source-if-match如果源Object的ETag值和用户提供的ETag相等,则执行拷贝操作,并返回200;否则返回412HTTP错误码(预处理失败).
类型:字符串默认值:无x-oss-copy-source-if-none-match如果源Object的ETag值和用户提供的ETag不相等,则执行拷贝操作,并返回200;否则返回304HTTP错误码(预处理失败).
类型:字符串默认值:无x-oss-copy-source-if-unmodified-since如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件,并返回200OK;否则返回412preconditionfailed错误.
类型:字符串默认值:无x-oss-copy-source-if-modified-since如果源Object自从用户指定的时间以后被修改过,则执行拷贝操作;否则返回304HTTP错误码(预处理失败).
类型:字符串默认值:无x-oss-metadata-directive有效值为COPY和REPLACE.
如果该值设为COPY,则新的Object的meta都从源Object复制过来;如果设为REPLACE,则忽视所有源Object的meta值,而采用用户这次请求中指定的meta值;其他值则返回400HTTP错误码.
注意该值为COPY时,源Object的x-oss-server-side-encryption的meta值不会进行拷贝.
对象存储OSSAPI参考591.
2.
3.
4.
5.
6.
7.
8.
响应元素(ResponseElements)细节分析可以通过拷贝操作来实现修改已有Object的meta信息.
如果拷贝操作的源Object地址和目标Object地址相同,则无论x-oss-metadata-directive为何值,都会直接替换源Object的meta信息.
OSS支持拷贝操作的四个预判断Header任意个同时出现,相应逻辑参见GetObject操作的细节分析.
拷贝操作需要请求者对源Object有读权限.
源Object和目标Object必须属于同一个数据中心,否则返回403AccessDenied,错误信息为:Targetobjectdoesnotresideinthesamedatacenterassourceobject.
拷贝操作的计费统计会对源Object所在的Bucket增加一次Get请求次数,并对目标Object所在的Bucket增加一次Put请求次数,以及相应的新增存储空间.
拷贝操作涉及到的请求头,都是以"x-oss-"开头的,所以要加入签名字符串中.
若在拷贝操作中指定了x-oss-server-side-encryption请求头,并且请求值合法(为AES256),则无论源Object是否进行过服务器端加密编码,拷贝之后的目标Object都会进行服务器端加密编码.
并且拷贝操作的响应头中会包含x-oss-server-side-encryption,值被设置成目标Object的加密算法.
在这个目标Object被下载时,响应头中也会包含x-oss-server-side-encryption,值被设置成该Object的加密算法;若拷贝操作中未指定x-oss-server-side-encryption请求头,则无论源Object是类型:字符串默认值:COPY有效值:COPY、REPLACEx-oss-server-side-encryption指定oss创建目标object时的服务器端熵编码加密算法类型:字符串有效值:AES256x-oss-object-acl指定oss创建object时的访问权限.
类型:字符串合法值:public-read,private,public-read-write名称描述CopyObjectResultCopyObject结果类型:字符串默认值:无ETag新Object的ETag值.
类型:字符串父元素:CopyObjectResultLastModified新Object最后更新时间.
类型:字符串父元素:CopyObjectResult对象存储OSSAPI参考609.
10.
11.
12.
13.
14.
否进行过服务器端加密编码,拷贝之后的目标Object都是未进行过服务器端加密编码加密的数据.
拷贝操作中x-oss-metadata-directive请求头为COPY(默认值)时,并不拷贝源Object的x-oss-server-side-encryption值,即目标Object是否进行服务器端加密编码只根据COPY操作是否指定了x-oss-server-side-encryption请求头来决定.
若在拷贝操作中指定了x-oss-server-side-encryption请求头,并且请求值非AES256,则返回400和相应的错误提示:InvalidEncryptionAlgorithmError.
如果拷贝的文件大小大于1GB,会返回400和错误提示:EntityTooLarge.
该操作不能拷贝通过Append追加上传方式产生的object.
如果文件类型为符号链接,只拷贝符号链接.
如果Bucket的类型为Archive,则不能调用该接口,否则返回400错误,错误码为OperationNotSupported.
示例请求示例:返回示例:GetObject用于获取某个Object,此操作要求用户对该Object有读权限.
请求语法PUT/copy_oss.
jpgHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201207:18:48GMTx-oss-copy-source:/oss-example/oss.
jpgAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:gmnwPKuu20LQEjd+iPkL259A+n0=HTTP/1.
1200OKx-oss-request-id:559CC9BDC755F95A64485981Content-Type:application/xmlContent-Length:193Connection:keep-aliveDate:Fri,24Feb201207:18:48GMTServer:AliyunOSSFri,24Feb201207:18:48GMT"5B3C1A2E053D763E1B002CC607C5A0FE"对象存储OSSAPI参考61请求参数(RequestParameters)OSS支持用户在发送GET请求时,可以自定义OSS返回请求中的一些Header,前提条件是用户发送的GET请求必须携带签名.
这些Header包括:请求HeaderGET/ObjectNameHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValueRange:bytes=ByteRange(可选)名称描述response-content-type设置OSS返回请求的content-type头类型:字符串默认值:无response-content-language设置OSS返回请求的content-language头类型:字符串默认值:无response-expires设置OSS返回请求的expires头类型:字符串默认值:无response-cache-control设置OSS返回请求的cache-control头类型:字符串默认值:无response-content-disposition设置OSS返回请求的content-disposition头类型:字符串默认值:无response-content-encoding设置OSS返回请求的content-encoding头类型:字符串默认值:无名称描述Range指定文件传输的范围.
如,设定bytes=0-9,表示传送第0到第9这10个字符.
类型:字符串默认值:无If-Modified-Since如果指定的时间早于实际修改时间,则正常传送文件,并返回200OK;否则返回304notmodified类型:字符串默认值:无时间格式:GMT时间,例如Fri,13Nov201514:47:53GMTIf-Unmodified-Since如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件,并返回200OK;否则返对象存储OSSAPI参考621.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
细节分析GetObject通过range参数可以支持断点续传,对于比较大的Object建议使用该功能.
如果在请求头中使用Range参数;则返回消息中会包含整个文件的长度和此次返回的范围,例如:Content-Range:bytes0-9/44,表示整个文件长度为44,此次返回的范围为0-9.
如果不符合范围规范,则传送整个文件,并且不在结果中提及Content-Range.
如果"If-Modified-Since"元素中设定的时间不符合规范,直接返回文件,并返回200OK.
If-Modified-Since和If-Unmodified-Since可以同时存在,If-Match和If-None-Match也可以同时存在.
如果包含If-Unmodified-Since并且不符合或者包含If-Match并且不符合,返回412preconditionfailed如果包含If-Modified-Since并且不符合或者包含If-None-Match并且不符合,返回304NotModified如果文件不存在,返回404NotFound错误.
错误码:NoSuchKey.
OSS不支持在匿名访问的GET请求中,通过请求参数来自定义返回请求的header.
在自定义OSS返回请求中的一些Header时,只有请求处理成功(即返回码为200时),OSS才会将请求的header设置成用户GET请求参数中指定的值.
若该Object为进行服务器端熵编码加密存储的,则在GET请求时会自动解密返回给用户,并且在响应头中,会返回x-oss-server-side-encryption,其值表明该Object的服务器端加密算法.
需要将返回内容进行GZIP压缩传输的用户,需要在请求的Header中显示方式加入Accept-Encoding:gzip,OSS会根据文件的Content-Type和文件大小,判断是否返回给用户经过GZIP压缩的数据.
如果采用了GZIP压缩则不会附带etag信息.
目前OSS支持GZIP压缩的Content-Type为HTML、Javascript、CSS、XML、RSS、Json,文件大小需不小于1k.
如果文件类型为符号链接,返回目标文件的内容.
并且,响应头中Content-Length、ETag、Content-Md5均为目标文件的元信息;Last-Modified是目标文件和符号链接的最大值;其他均为符号链接的元信息.
如果文件类型为符号链接,并且目标文件不存在,返回404NotFound错误.
错误码:SymlinkTargetNotExist.
如果文件类型为符号链接,并且目标文件类型是符号链接,返回400Badrequest错误.
错误码回412preconditionfailed错误类型:字符串默认值:无时间格式:GMT时间,例如Fri,13Nov201514:47:53GMTIf-Match如果传入期望的ETag和object的ETag匹配,则正常传输文件,并返回200OK;否则返回412preconditionfailed错误类型:字符串默认值:无If-None-Match如果传入的ETag值和Object的ETag不匹配,则正常传输文件,并返回200OK;否则返回304NotModified类型:字符串默认值:无对象存储OSSAPI参考6315.
:InvalidTargetType.
对于Archive归档类型,Object下载需要提交Restore请求,并等待Restore完成;只有在Object的Restore操作完成且超时前,Object才能被下载:a.
如果没有提交Restore请求,或者上一次提交Restore已经超时,则返回403错,错误码为:InvalidObjectState.
b.
或者已经提交Restore请求,但数据的Restore操作还没有完成,则返回403错,错误码为:InvalidObjectState.
c.
只有Restore完成,且没有超时,数据才能直接下载.
示例请求示例:返回示例:Range请求示例:返回示例:GET/oss.
jpgHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201206:38:30GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:UNQDb7GapEgJCZkcde6OhZ9Jfe8=HTTP/1.
1200OKx-oss-request-id:3a89276f-2e2d-7965-3ff9-51c875b99c41x-oss-object-type:NormalDate:Fri,24Feb201206:38:30GMTLast-Modified:Fri,24Feb201206:07:48GMTETag:"5B3C1A2E053D763E1B002CC607C5A0FE"Content-Type:image/jpgContent-Length:344606Server:AliyunOSS[344606bytesofobjectdata]GET//oss.
jpgHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,28Feb201205:38:42GMTRange:bytes=100-900Authorization:OSSqn6qrrqxo2oawuk53otfjbyc:qZzjF3DUtd+yK16BdhGtFcCVknM=HTTP/1.
1206PartialContentx-oss-request-id:28f6508f-15ea-8224-234e-c0ce40734b89x-oss-object-type:NormalDate:Fri,28Feb201205:38:42GMTLast-Modified:Fri,24Feb201206:07:48GMT对象存储OSSAPI参考64自定义返回消息头的请求示例:返回示例:符号链接的请求示例:返回示例:ETag:"5B3C1A2E053D763E1B002CC607C5A0FE"Accept-Ranges:bytesContent-Range:bytes100-900/344606Content-Type:image/jpgContent-Length:801Server:AliyunOSS[801bytesofobjectdata]GET/oss.
jpgresponse-expires=Thu%2C%2001%20Feb%202012%2017%3A00%3A00%20GMT&response-content-type=text&response-cache-control=No-cache&response-content-disposition=attachment%253B%2520filename%253Dtesting.
txt&response-content-encoding=utf-8&response-content-language=%E4%B8%AD%E6%96%87HTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
com:Date:Fri,24Feb201206:09:48GMTHTTP/1.
1200OKx-oss-request-id:559CC9BDC755F95A64485981x-oss-object-type:NormalDate:Fri,24Feb201206:09:48GMTLast-Modified:Fri,24Feb201206:07:48GMTETag:"5B3C1A2E053D763E1B002CC607C5A0FE"Content-Length:344606Connection:keep-aliveContent-disposition:attachment;filename:testing.
txtContent-language:中文Content-encoding:utf-8Content-type:textCache-control:no-cacheExpires:Fri,24Feb201217:00:00GMTServer:AliyunOSS[344606bytesofobjectdata]GET/link-to-oss.
jpgHTTP/1.
1Accept-Encoding:identityDate:Tue,08Nov201603:17:58GMTHost:oss-example.
oss-cn-hangzhou.
aliyuncs.
comAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:qZzjF3DUtd+yK16BdhGtFcCVknM=HTTP/1.
1200OKServer:AliyunOSSDate:Tue,08Nov201603:17:58GMT对象存储OSSAPI参考65Archive类型Object的Restore操作已经完成时的请求示例:返回示例AppendObjectAppendObject以追加写的方式上传文件.
通过AppendObject操作创建的Object类型为AppendableObject,而通过PutObject上传的Object是NormalObject.
请求语法Content-Type:application/octet-streamContent-Length:20Connection:keep-alivex-oss-request-id:582143E6D3436A212ADCC87DAccept-Ranges:bytesETag:"8086265EFC0211ED1F9A2F09BF462227"Last-Modified:Tue,08Nov201603:17:58GMTx-oss-object-type:SymlinkContent-MD5:gIYmXvwCEe0fmi8Jv0YiJw==GET/oss.
jpgHTTP/1.
1Host:oss-archive-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Sat,15Apr201709:38:30GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:zUglwRPGkbByZxm1+y4eyu+NIUs=HTTP/1.
1200OKx-oss-request-id:58F723894529F18D7F000053x-oss-object-type:Normalx-oss-restore:ongoing-request="false",expiry-date="Sun,16Apr201708:12:33GMT"Date:Sat,15Apr201709:38:30GMTLast-Modified:Sat,15Apr201706:07:48GMTETag:"5B3C1A2E053D763E1B002CC607C5A0FE"Content-Type:image/jpgContent-Length:344606Server:AliyunOSS[354606bytesofobjectdata]POST/ObjectNameappend&position=PositionHTTP/1.
1Content-Length:ContentLengthContent-Type:ContentTypeHost:BucketName.
oss.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue对象存储OSSAPI参考66请求Header响应Header名称描述Cache-Control指定该Object被下载时的网页的缓存行为;更详细描述请参照RFC2616.
类型:字符串默认值:无Content-Disposition指定该Object被下载时的名称;更详细描述请参照RFC2616.
类型:字符串默认值:无Content-Encoding指定该Object被下载时的内容编码格式;更详细描述请参照RFC2616.
类型:字符串默认值:无Content-MD5根据协议RFC1864对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码为一个消息的Content-MD5值.
该请求头可用于消息合法性的检查(消息内容是否与发送时一致).
虽然该请求头是可选项,OSS建议用户使用该请求头进行端到端检查.
类型:字符串默认值:无限制:无Expires过期时间;更详细描述请参照RFC2616.
类型:整数默认值:无x-oss-server-side-encryption指定oss创建object时的服务器端加密编码算法.
类型:字符串合法值:AES256x-oss-object-acl指定oss创建object时的访问权限.
类型:字符串合法值:public-read,private,public-read-write名称描述x-oss-next-append-position指明下一次请求应当提供的position.
实际上就是当前Object长度.
当AppendObject成功返回,或是因position和Object长度不匹配而引起的409错误时,会包含此header.
类型:64位整型x-oss-hash-crc64ecma表明Object的64位CRC值.
该64位CRC根据ECMA-182标准计算得出.
类型:64位整型对象存储OSSAPI参考671.
2.
3.
4.
5.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
和其他操作的关系不能对一个非AppendableObject进行AppendObject操作.
例如,已经存在一个同名NormalObject时,AppendObject调用返回409,错误码ObjectNotAppendable.
对一个已经存在的AppendableObject进行PutObject操作,那么该AppendableObject会被新的Object覆盖,类型变为NormalObject.
HeadObject操作会返回x-oss-object-type,用于表明Object的类型.
对于AppendableObject来说,该值为Appendable.
对AppendableObject,HeadObject也会返回上述的x-oss-next-append-position和x-oss-hash-crc64ecma.
GetBucket(ListObjects)请求的响应XML中,会把AppendableObject的Type设为Appendable不能使用CopyObject来拷贝一个AppendableObject,也不能改变它的服务器端加密的属性.
可以使用CopyObject来改变用户自定义元信息.
细节分析:URL参数append和position均为CanonicalizedResource,需要包含在签名中.
URL的参数必须包含append,用来指定这是一个AppendObject操作.
URL查询参数还必须包含position,其值指定从何处进行追加.
首次追加操作的position必须为0,后续追加操作的position是Object的当前长度.
例如,第一次AppendObject请求指定position值为0,content-length是65536;那么,第二次AppendObject需要指定position为65536.
每次操作成功后,响应头部x-oss-next-append-position也会标明下一次追加的position.
如果position的值和当前Object的长度不一致,OSS会返回409错误,错误码为PositionNotEqualToLength.
发生上述错误时,用户可以通过响应头部x-oss-next-append-position来得到下一次position,并再次进行请求.
当Position值为0时,如果没有同名AppendableObject,或者同名AppendableObject长度为0,该请求成功;其他情况均视为Position和Object长度不匹配的情形.
当Position值为0,且没有同名Object存在,那么AppendObject可以和PutObject请求一样,设置诸如x-oss-server-side-encryption之类的请求Header.
这一点和InitiateMultipartUpload是一样的.
如果在Position为0的请求时,加入了正确的x-oss-server-side-encryption头,那么后续的AppendObject响应头部也会包含x-oss-server-side-encryption头,其值表明加密算法.
后续如果需要更改meta,可以使用CopyObject请求.
由于并发的关系,即使用户把position的值设为了x-oss-next-append-position,该请求依然可能因为PositionNotEqualToLength而失败.
AppendObject产生的Object长度限制和PutObject一样.
每次AppendObject都会更新该Object的最后修改时间.
在position值正确的情况下,对已存在的AppendableObject追加一个长度为0的内容,该操作不会改变Object的状态.
CRC64的计算方式AppendableObject的CRC采用ECMA-182标准,和XZ的计算方式一样.
用BoostCRC模块的方式来定义则有对象存储OSSAPI参考68:或是用Pythoncrcmod的方式为:示例请求示例:返回示例:typedefboost::crc_optimalboost_ecma;uint64_tdo_boost_crc(constchar*buffer,intlength){boost_ecmacrc;crc.
process_bytes(buffer,length);returncrc.
checksum();}do_crc64=crcmod.
mkCrcFun(0x142F0E1EBA9EA3693L,initCrc=0L,xorOut=0xffffffffffffffffL,rev=True)printdo_crc64("123456789")POST/oss.
jpgappend&position=0HTTP/1.
1Host:oss-example.
oss.
aliyuncs.
comCache-control:no-cacheExpires:Wed,08Jul201516:57:01GMTContent-Encoding:utf-8Content-Disposition:attachment;filename=oss_download.
jpgDate:Wed,08Jul201506:57:01GMTContent-Type:image/jpgContent-Length:1717Authorization:OSSqn6qrrqxo2oawuk53otfjbyc:kZoYNv66bsmc10+dcGKw5x2PRrk=[1717bytesofobjectdata]HTTP/1.
1200OKDate:Wed,08Jul201506:57:01GMTETag:"0F7230CAA4BE94CCBDC99C5500000000"Connection:keep-aliveContent-Length:0Server:AliyunOSSx-oss-hash-crc64ecma:14741617095266562575x-oss-next-append-position:1717x-oss-request-id:559CC9BDC755F95A64485981对象存储OSSAPI参考691.
2.
3.
DeleteObjectDeleteObject用于删除某个Object.
请求语法细节分析DeleteObject要求对该Object要有写权限.
如果要删除的Object不存在,OSS也返回状态码204(NoContent).
如果Bucket不存在,返回404NotFound.
示例请求示例:返回示例:DeleteMultipleObjectsDeleteMultipleObjects操作支持用户通过一个HTTP请求删除同一个Bucket中的多个Object.
DeleteMultipleObjects操作支持一次请求内最多删除1000个Object,并提供两种返回模式:详细(verbose)模式和DELETE/ObjectNameHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValueDELETE/copy_oss.
jpgHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201207:45:28GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:zUglwRPGkbByZxm1+y4eyu+NIUs=HTTP/1.
1204NoContentx-oss-request-id:559CC9BDC755F95A64485981Date:Fri,24Feb201207:45:28GMTContent-Length:0Connection:keep-aliveServer:AliyunOSS对象存储OSSAPI参考70--简单(quiet)模式:详细模式:OSS返回的消息体中会包含每一个删除Object的结果.
简单模式:OSS返回的消息体中只包含删除过程中出错的Object结果;如果所有删除都成功的话,则没有消息体.
请求语法请求参数(RequestParameters)DeleteMultipleObjects时,可以通过encoding-type对返回结果中的Key进行编码.
请求元素(RequestElements)POST/deleteHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateContent-Length:ContentLengthContent-MD5:MD5ValueAuthorization:SignatureValuetruekey…名称描述encoding-type指定对返回的Key进行编码,目前支持url编码.
Key使用UTF-8字符,但xml1.
0标准不支持解析一些控制字符,比如ascii值从0到10的字符.
对于Key中包含xml1.
0标准不支持的控制字符,可以通过指定encoding-type对返回的Key进行编码.
数据类型:字符串默认值:无,可选值:url名称描述Delete保存DeleteMultipleObject请求的容器.
类型:容器子节点:一个或多个Object元素,可选的Quiet元素父节点:None.
Key被删除Object的名字.
类型:字符串对象存储OSSAPI参考711.
2.
3.
4.
5.
6.
响应元素(ResponseElements)细节分析DeleteMultipleObjects请求必须填Content-Length和Content-MD5字段.
OSS会根据这些字段验证收到的消息体是正确的,之后才会执行删除操作.
生成Content-MD5字段内容方法:首先将DeleteMultipleObject请求内容经过MD5加密后得到一个128位字节数组;再将该字节数组用base64算法编码;最后得到的字符串即是Content-MD5字段内容.
DeleteMultipleObjects请求默认是详细(verbose)模式.
在DeleteMultipleObjects请求中删除一个不存在的Object,仍然认为是成功的.
DeleteMultipleObjects的消息体最大允许2MB的内容,超过2MB会返回MalformedXML错误码.
DeleteMultipleObjects请求最多允许一次删除1000个Object;超过1000个Object会返回MalformedXML错误码.
父节点:ObjectObject保存一个Object信息的容器.
类型:容器子节点:key父节点:Delete.
Quiet打开"简单"响应模式的开关.
类型:枚举字符串有效值:true、false默认值:false父节点:Delete名称描述Deleted保存被成功删除的Object的容器.
类型:容器子节点:Key父节点:DeleteResultDeleteResult保存DeleteMultipleObject请求结果的容器.
类型:容器子节点:Deleted父节点:NoneKeyOSS执行删除操作的Object名字.
类型:字符串父节点:DeletedEncodingType指明返回结果中编码使用的类型.
如果请求的参数中指定了encoding-type,那返回的结果会对Key进行编码.
类型:字符串父节点:容器对象存储OSSAPI参考727.
如果用户上传了Content-MD5请求头,OSS会计算body的Content-MD5并检查一致性,如果不一致,将返回InvalidDigest错误码.
示例请求示例I:返回示例:POST/deleteHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Wed,29Feb201212:26:16GMTContent-Length:151Content-MD5:ohhnqLBJFiKkPSBO1eNaUA==Authorization:OSSqn6qrrqxo2oawuk53otfjbyc:+z3gBfnFAxBcBDgx27Y/jEfbfu8=falsemultipart.
datatest.
jpgdemo.
jpgHTTP/1.
1200OKx-oss-request-id:78320852-7eee-b697-75e1-b6db0f4849e7Date:Wed,29Feb201212:26:16GMTContent-Length:244Content-Type:application/xmlConnection:keep-aliveServer:AliyunOSSmultipart.
datatest.
jpgdemo.
jpg对象存储OSSAPI参考73请求示例II:返回示例:HeadObjectHeadObject只返回某个Object的meta信息,不返回文件内容.
请求语法POST/deleteHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Wed,29Feb201212:33:45GMTContent-Length:151Content-MD5:ohhnqLBJFiKkPSBO1eNaUA==Authorization:OSSqn6qrrqxo2oawuk53otfjbyc:WuV0Jks8RyGSNQrBca64kEExJDs=truemultipart.
datatest.
jpgdemo.
jpgHTTP/1.
1200OKx-oss-request-id:559CC9BDC755F95A64485981Date:Wed,29Feb201212:33:45GMTContent-Length:0Connection:keep-aliveServer:AliyunOSSHEAD/ObjectNameHTTP/1.
1Host:BucketName/oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue对象存储OSSAPI参考741.
2.
3.
4.
5.
6.
7.
8.
9.
10.
-请求Header细节分析不论正常返回200OK还是非正常返回,HeadObject都不返回消息体.
HeadObject支持在头中设定If-Modified-Since,If-Unmodified-Since,If-Match,If-None-Match的查询条件.
具体规则请参见GetObject中对应的选项.
如果没有修改,返回304NotModified.
如果用户在PutObject的时候传入以x-oss-meta-为开头的usermeta,比如x-oss-meta-location,返回消息时,返回这些usermeta.
如果文件不存在返回404NotFound错误.
若该Object为进行服务器端熵编码加密存储的,则在Head请求响应头中,会返回x-oss-server-side-encryption,其值表明该Object的服务器端加密算法.
如果文件类型为符号链接,响应头中Content-Length、ETag、Content-Md5均为目标文件的元信息;Last-Modified是目标文件和符号链接的最大值;其他均为符号链接元信息.
如果文件类型为符号链接,并且目标文件不存在,返回404NotFound错误.
错误码:SymlinkTargetNotExist.
如果文件类型为符号链接,并且目标文件类型是符号链接,返回400Badrequest错误.
错误码:InvalidTargetType.
如果Bucket类型为Archive,响应头中以x-oss-storage-class展示Object的存储类型.
如果Bucket类型为Archive,且用户已经提交Restore请求,则响应头中会以x-oss-restore返回该Object的Restore状态,分如下几种情况:如果没有提交Restore或者Restore已经超时,则不返回该字段.
名称描述If-Modified-Since如果指定的时间早于实际修改时间,则返回200OK和ObjectMeta;否则返回304notmodified类型:字符串默认值:无If-Unmodified-Since如果传入参数中的时间等于或者晚于文件实际修改时间,则返回200OK和ObjectMeta;否则返回412preconditionfailed错误类型:字符串默认值:无If-Match如果传入期望的ETag和object的ETag匹配,则返回200OK和ObjectMeta;否则返回412preconditionfailed错误类型:字符串默认值:无If-None-Match如果传入的ETag值和Object的ETag不匹配,则返回200OK和ObjectMeta;否则返回304NotModified类型:字符串默认值:无对象存储OSSAPI参考75--如果已经提交Restore,且Restore没有时完成,则返回的x-oss-restore值为:ongoing-request="true".
如果已经提交Restore,且Restore已经完成,则返回的x-oss-restore值为:ongoing-request="false",expiry-date="Sun,16Apr201708:12:33GMT".
示例请求示例:返回示例:提交Restore请求但restore没有完成时的请求示例返回示例HEAD/oss.
jpgHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Fri,24Feb201207:32:52GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:JbzF2LxZUtanlJ5dLA092wpDC/E=HTTP/1.
1200OKx-oss-request-id:559CC9BDC755F95A64485981x-oss-object-type:NormalDate:Fri,24Feb201207:32:52GMTLast-Modified:Fri,24Feb201206:07:48GMTETag:"fba9dede5f27731c9771645a39863328"Content-Length:344606Content-Type:image/jpgConnection:keep-aliveServer:AliyunOSSHEAD/oss.
jpgHTTP/1.
1Host:oss-archive-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Sat,15Apr201707:32:52GMTAuthorization:OSSe1Unnbm1rgdnpI:KKxkdNrUBu2t1kqlDh0MLbDb99I=HTTP/1.
1200OKx-oss-request-id:58F71A164529F18D7F000045x-oss-object-type:Normalx-oss-restore:ongoing-request="true"Date:Sat,15Apr201707:32:52GMTLast-Modified:Sat,15Apr201706:07:48GMTETag:"fba9dede5f27731c9771645a39863328"Content-Length:344606Content-Type:image/jpgConnection:keep-aliveServer:AliyunOSS对象存储OSSAPI参考761.
2.
3.
4.
提交Restore请求且restore已经完成时的请求示例返回示例GetObjectMetaGetObjectMeta用来获取某个Bucket下的某个Object的基本meta信息,包括该Object的ETag、Size(文件大小)、LastModified,并不返回其内容.
请求语法细节分析细节分析:无论正常返回还是非正常返回,GetObjectMeta均不返回消息体.
GetObjectMeta需包含objectMeta请求参数,否则表示GetObject请求.
如果文件不存在返回404NotFound错误.
GetObjectMeta相比HeadObject更轻量,仅返回指定Object的少量基本meta信息,包括该Object的ETag、Size(文件大小)、LastModified,其中Size由响应头Content-Length的数值表示.
HEAD/oss.
jpgHTTP/1.
1Host:oss-archive-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Sat,15Apr201709:35:51GMTAuthorization:OSSe1Unnbm1rgdnpI:21qtGJ+ykDVmdu6O6FMJnn+WuBw=HTTP/1.
1200OKx-oss-request-id:58F725344529F18D7F000055x-oss-object-type:Normalx-oss-restore:ongoing-request="false",expiry-date="Sun,16Apr201708:12:33GMT"Date:Sat,15Apr201709:35:51GMTLast-Modified:Sat,15Apr201706:07:48GMTETag:"fba9dede5f27731c9771645a39863328"Content-Length:344606GET/ObjectNameobjectMetaHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue对象存储OSSAPI参考77示例请求示例:返回示例PutObjectACLPutObjectACL接口用于修改Object的访问权限.
目前Object有三种访问权限:private,public-read,public-read-write.
PutObjectACL操作通过Put请求中的"x-oss-object-acl"头来设置,这个操作只有BucketOwner有权限执行.
如果操作成功,则返回200;否则返回相应的错误码和提示信息.
请求语法:ObjectACL释义GET/oss.
jpgobjectMetaHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Wed,29Apr201505:21:12GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:CTkuxpLAi4XZ+WwIfNm0FmgbrQ0=HTTP/1.
1200OKx-oss-request-id:559CC9BDC755F95A64485981Date:Wed,29Apr201505:21:12GMTETag:"5B3C1A2E053D763E1B002CC607C5A0FE"Last-Modified:Fri,24Feb201206:07:48GMTContent-Length:344606Connection:keep-aliveServer:AliyunOSSPUT/ObjectNameaclHTTP/1.
1x-oss-object-acl:PermissionHost:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述private该ACL表明某个Object是私有资源,即只有该Object的Owner拥有该Object的读写权限,其他的用户没有权限操作该Objectpublic-read该ACL表明某个Object是公共读资源,即非ObjectOwner只有该Object的读权限,而Object对象存储OSSAPI参考781.
2.
3.
4.
5.
6.
7.
细节分析:Object的读操作包括:GetObject,HeadObject,CopyObject和UploadPartCopy中的对sourceobject的读;Object的写操作包括:PutObject,PostObject,AppendObject,DeleteObject,DeleteMultipleObjects,CompleteMultipartUpload以及CopyObject对新的Object的写.
x-oss-object-acl中权限的值必须在上述3种权限中.
如果有不属于上述3种的权限,OSS返回400BadRequest消息,错误码:InvalidArgument.
用户不仅可以通过PutObjectACL接口来设置ObjectACL,还可以在Object的写操作时,在请求头中带上x-oss-object-acl来设置ObjectACL,效果与PutObjectAACL等同.
例如PutObject时在请求头中带上x-oss-object-acl可以在上传一个Object的同时设置某个Object的ACL.
对某个Object没有读权限的用户读取某个Object时,OSS返回403Forbidden消息,错误码:AccessDenied,提示:Youdonothavereadpermissiononthisobject.
对某个Object没有写权限的用户写某个Object时,OSS返回403Forbidden消息,错误码:AccessDenied,提示:Youdonothavewritepermissiononthisobject.
只有BucketOwner采用权限调用PutObjectACL来修改该Bucket下某个Object的ACL.
非BucketOwner调用PutObjectACL时,OSS返回403Forbidden消息,错误码:AccessDenied,提示:Youdonothavewriteaclpermissiononthisobject.
ObjectACL优先级高于BucketACL.
例如BucketACL是private的,而ObjectACL是public-read-write的,则访问这个Object时,先判断Object的ACL,所以所有用户都拥有这个Object的访问权限,即使这个Bucket是privatebucket.
如果某个Object从来没设置过ACL,则访问权限遵循BucketACL.
示例请求示例:返回示例:Owner拥有该Object的读写权限public-read-write该ACL表明某个Object是公共读写资源,即所有用户拥有对该Object的读写权限default该ACL表明某个Object是遵循Bucket读写权限的资源,即Bucket是什么权限,Object就是什么权限PUT/test-objectaclHTTP/1.
1x-oss-object-acl:public-readHost:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Wed,29Apr201505:21:12GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=HTTP/1.
1200OK对象存储OSSAPI参考79GetObjectACLGetObjectACL用来获取某个Bucket下的某个Object的访问权限.
请求语法响应元素(ResponseElements)x-oss-request-id:559CC9BDC755F95A64485981Date:Wed,29Apr201505:21:12GMTContent-Length:0Connection:keep-aliveServer:AliyunOSSGET/ObjectNameaclHTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comDate:GMTDateAuthorization:SignatureValue名称描述AccessControlList存储ACL信息的容器类型:容器父节点:AccessControlPolicyAccessControlPolicy保存GetObjectACL结果的容器类型:容器父节点:NoneDisplayNameBucket拥有者的名称.
.
(目前和ID一致)类型:字符串父节点:AccessControlPolicy.
OwnerGrantObject的ACL权限.
类型:枚举字符串有效值:private,public-read,public-read-write父节点:AccessControlPolicy.
AccessControlListIDBucket拥有者的用户ID类型:字符串父节点:AccessControlPolicy.
OwnerOwner保存Bucket拥有者信息的容器.
类型:容器父节点:AccessControlPolicy对象存储OSSAPI参考801.
2.
细节分析只有Bucket的拥有者才能使用GetObjectACL这个接口来获取该Bucket下某个Object的ACL,非BucketOwner调用该接口时,返回403Forbidden消息.
错误码:AccessDenied,提示Youdonothavereadaclpermissiononthisobject.
如果从来没有对某个Object设置过ACL,则调用GetObjectACL时,OSS返回的ObjectACL会是default,表明该ObjectACL遵循BucketACL.
即:如果Bucket是private的,则该object也是private的;如果该object是public-read-write的,则该object也是public-read-write的.
示例请求示例:返回示例:PostObjectPostObject使用HTML表单上传文件到指定bucket.
Post作为Put的替代品,使得基于浏览器上传文件到bucket成为可能.
PostObject的消息实体通过多重表单格式(multipart/form-data)编码,在PutObject操作中参数通过HTTP请求头传递,在Post操作中参数则作为消息实体中的表单域传递.
GET/test-objectaclHTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comDate:Wed,29Apr201505:21:12GMTAuthorization:OSSqn6qrrqxo2oawuk53otfjbyc:CTkuxpLAi4XZ+WwIfNm0FmgbrQ0=HTTP/1.
1200OKx-oss-request-id:559CC9BDC755F95A64485981Date:Wed,29Apr201505:21:12GMTContent-Length:253Content-Tupe:application/xmlConnection:keep-aliveServer:AliyunOSS0022012022200220120222public-read对象存储OSSAPI参考81Postobject请求语法POST/HTTP/1.
1Host:BucketName.
oss-cn-hangzhou.
aliyuncs.
comUser-Agent:browser_dataContent-Length:ContentLengthContent-Type:multipart/form-data;boundary=9431149156168--9431149156168Content-Disposition:form-data;name="key"key--9431149156168Content-Disposition:form-data;name="success_action_redirect"success_redirect--9431149156168Content-Disposition:form-data;name="Content-Disposition"attachment;filename=oss_download.
jpg--9431149156168Content-Disposition:form-data;name="x-oss-meta-uuid"myuuid--9431149156168Content-Disposition:form-data;name="x-oss-meta-tag"mytag--9431149156168Content-Disposition:form-data;name="OSSAccessKeyId"access-key-id--9431149156168Content-Disposition:form-data;name="policy"encoded_policy--9431149156168Content-Disposition:form-data;name="Signature"signature--9431149156168Content-Disposition:form-data;name="file";filename="MyFilename.
jpg"Content-Type:image/jpegfile_content--9431149156168Content-Disposition:form-data;name="submit"UploadtoOSS--9431149156168--对象存储OSSAPI参考82表单域名称描述必须OSSAccessKeyIdBucket拥有者的AccessKeyId.
类型:字符串默认值:无限制:当bucket非public-read-write或者提供了policy(或Signature)表单域时,必须提供该表单域.
有条件的policypolicy规定了请求的表单域的合法性.
不包含policy表单域的请求被认为是匿名请求,并且只能访问public-read-write的bucket.
更详细描述请参考下文PostPolicy.
类型:字符串默认值:无限制:当bucket非public-read-write或者提供了OSSAccessKeyId(或Signature)表单域时,必须提供该表单域.
有条件的Signature根据AccessKeySecret和policy计算的签名信息,OSS验证该签名信息从而验证该Post请求的合法性.
更详细描述请参考下文PostSignature.
类型:字符串默认值:无限制:当bucket非public-read-write或者提供了OSSAccessKeyId(或policy)表单域时,必须提供该表单域.
有条件的Cache-Control,Content-Type,Content-Disposition,Content-Encoding,ExpiresREST请求头,更多的信息见PutObject.
类型:字符串默认值:无可选file文件或文本内容,必须是表单中的最后一个域.
浏览器会自动根据文件类型来设置Content-Type,会覆盖用户的设置.
OSS一次只能上传一个文件.
类型:字符串默认值:无必须key上传文件的object名称.
如果需要使用用户上传的文件名称作为object名,使用${filename}变量.
例如:如果用户上传了文件b.
jpg,而key域的值设置为必须对象存储OSSAPI参考83/user/a/${filename},最终的object名为/user/a/b.
jpg.
如果文件名包含路径,则去除文件名中的路径,例如用户上传了文件a/b/c/b.
jpg,则取文件名为b.
jpg,若key域的值设置为/user/a/${filename},最终的object名为/user/a/b.
jpg类型:字符串默认值:无success_action_redirect上传成功后客户端跳转到的URL,如果未指定该表单域,返回结果由success_action_status表单域指定.
如果上传失败,OSS返回错误码,并不进行跳转.
类型:字符串默认值:无可选success_action_status未指定success_action_redirect表单域时,该表单域指定了上传成功后返回给客户端的状态码.
接受值为200,201,204(默认).
如果该域的值为200或者204,OSS返回一个空文档和相应的状态码.
如果该域的值设置为201,OSS返回一个XML文件和201状态码.
如果其值未设置或者设置成一个非法值,OSS返回一个空文档和204状态码.
类型:字符串默认值:无可选x-oss-meta-*用户指定的usermeta值.
OSS不会检查或者使用该值.
类型:字符串默认值:无可选x-oss-server-side-encryption指定OSS创建object时的服务器端加密编码算法.
类型:字符串合法值:AES256可选x-oss-object-acl指定oss创建object时的访问权限.
类型:字符串合法值:public-read,private,public-read-write可选x-oss-security-token若本次访问是使用STS临时授权方式,则需要指定该项为SecurityToken的值,同时OSSAccessKeyId需要使用与之配对的临时AccessKeyId,计算签名时,与使用普通AccessKeyId签名方式一致.
可选对象存储OSSAPI参考841.
2.
3.
4.
5.
6.
响应Header响应元素(ResponseElements)细节分析进行Post操作要求对bucket有写权限,如果bucket为public-read-write,可以不上传签名信息,否则要求对该操作进行签名验证.
与Put操作不同,Post操作使用AccessKeySecret对policy进行签名计算出签名字符串作为Signature表单域的值,OSS会验证该值从而判断签名的合法性.
无论bucket是否为public-read-write,一旦上传OSSAccessKeyId,policy,Signature表单域中的任意一个,则另两个表单域为必选项,缺失时OSS会返回错误码:InvalidArgument.
post操作提交表单编码必须为"multipart/form-data",即header中Content-Type为multipart/form-data;boundary=xxxxxx这样的形式,boundary为边界字符串.
提交表单的URL为bucket域名即可,不需要在URL中指定object.
即请求行是POST/HTTP/1.
1,不能写成POST/ObjectNameHTTP/1.
1policy规定了该次Post请求中表单域的合法值,OSS会根据policy判断请求的合法性,如果不合法会返回错误码:AccessDenied.
在检查policy合法性时,policy中不涉及的表单域不进行检查.
表单和policy必须使用UTF-8编码,policy为经过UTF-8编码和base64编码的JSON.
类型:字符串默认值:无名称描述x-oss-server-side-encryption如果请求指定了x-oss-server-side-encryption熵编码,则响应Header中包含了该头部,指明了所使用的加密算法.
类型:字符串名称描述PostResponse保持Post请求结果的容器.
类型:容器子节点:Bucket,ETag,Key,LocationBucketBucket名称.
类型:字符串父节点:PostResponseETagETag(entitytag)在每个Object生成的时候被创建,Post请求创建的Object,ETag值是该Object内容的uuid,可以用于检查该Object内容是否发生变化.
类型:字符串父节点:PostResponseLocation新创建Object的URL.
类型:字符串父节点:PostResponse对象存储OSSAPI参考857.
8.
9.
10.
11.
12.
13.
Post请求中可以包含额外的表单域,OSS会根据policy对这些表单域检查合法性.
如果用户上传了Content-MD5请求头,OSS会计算body的Content-MD5并检查一致性,如果不一致,将返回InvalidDigest错误码.
如果POST请求中包含Header签名信息或URL签名信息,OSS不会对它们做检查.
如果请求中携带以x-oss-meta-为前缀的表单域,则视为usermeta,比如x-oss-meta-location.
一个Object可以有多个类似的参数,但所有的usermeta总大小不能超过8k.
Post请求的body总长度不允许超过5G.
若文件长度过大,会返回错误码:EntityTooLarge.
如果上传指定了x-oss-server-side-encryptionHeader请求域,则必须设置其值为AES256,否则会返回400和错误码:InvalidEncryptionAlgorithmError.
指定该Header后,在响应头中也会返回该Header,OSS会对上传的Object进行加密编码存储,当这个Object被下载时,响应头中会包含x-oss-server-side-encryption,值被设置成该Object的加密算法.
表单域为大小写不敏感的,但是表单域的值为大小写敏感的.
示例请求示例:POST/HTTP/1.
1Host:oss-example.
oss-cn-hangzhou.
aliyuncs.
comContent-Length:344606Content-Type:multipart/form-data;boundary=9431149156168--9431149156168Content-Disposition:form-data;name="key"/user/a/${filename}--9431149156168Content-Disposition:form-data;name="success_action_status"200--9431149156168Content-Disposition:form-data;name="Content-Disposition"content_disposition--9431149156168Content-Disposition:form-data;name="x-oss-meta-uuid"uuid--9431149156168Content-Disposition:form-data;name="x-oss-meta-tag"metadata--9431149156168Content-Disposition:form-data;name="OSSAccessKeyId"44CF9590006BF252F707--9431149156168Content-Disposition:form-data;name="policy"eyJleHBpcmF0aW9uIjoiMjAxMy0xMi0wMVQxMjowMDowMFoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsIDAsIDEwNDg1NzYwXSx7ImJ1Y2tldCI6ImFoYWhhIn0sIHsiQSI6ICJhIn0seyJrZXkiOiAiQUJDIn1dfQ==对象存储OSSAPI参考86返回示例:PostPolicyPost请求的policy表单域用于验证请求的合法性.
policy为一段经过UTF-8和base64编码的JSON文本,声明了Post请求必须满足的条件.
虽然对于public-read-write的bucket上传时,post表单域为可选项,我们强烈建议使用该域来限制Post请求.
policy示例Postpolicy中必须包含expiration和condtions.
ExpirationExpiration项指定了policy的过期时间,以ISO8601GMT时间表示.
例如"2014-12-01T12:00:00.
000Z"指定了Post请求必须发生在2014年12月1日12点之前.
--9431149156168Content-Disposition:form-data;name="Signature"kZoYNv66bsmc10+dcGKw5x2PRrk=--9431149156168Content-Disposition:form-data;name="file";filename="MyFilename.
txt"Content-Type:text/plainabcdefg--9431149156168Content-Disposition:form-data;name="submit"UploadtoOSS--9431149156168--HTTP/1.
1200OKx-oss-request-id:61d2042d-1b68-6708-5906-33d81921362eDate:Fri,24Feb201406:03:28GMTETag:5B3C1A2E053D763E1B002CC607C5A0FEConnection:keep-aliveContent-Length:0Server:AliyunOSS{"expiration":"2014-12-01T12:00:00.
000Z","conditions":[{"bucket":"johnsmith"},["starts-with","$key","user/eric/"]]}对象存储OSSAPI参考87ConditionsConditions是一个列表,可以用于指定Post请求的表单域的合法值.
注意:表单域对应的值在检查policy之后进行扩展,因此,policy中设置的表单域的合法值应当对应于扩展之前的表单域的值.
例如,如果设置key表单域为user/user1/${filename},用户的文件名为a.
txt,则Postpolicy应当设置成["eq","$key","user/user1/\${filename}"],而不是["eq","$key","$key","user/user1/a.
txt"].
Policy中支持的conditions项见下表:如果Post请求中包含其他的表单域,可以将这些额外的表单域加入到policy的conditions中,conditions不涉及的表单域将不会进行合法性检查.
Conditions匹配方式转义字符于在Postpolicy中$表示变量,所以如果要描述$,需要使用转义字符\$.
除此之外,JSON将对一些字符进行转义.
下图描述了Postpolicy的JSON中需要进行转义的字符.
名称描述content-length-range上传文件的最小和最大允许大小.
该condition支持contion-length-range匹配方式.
Cache-Control,Content-Type,Content-Disposition,Content-Encoding,ExpiresHTTP请求头.
该condition支持精确匹配和starts-with匹配方式.
key上传文件的object名称.
该condition支持精确匹配和starts-with匹配方式.
success_action_redirect上传成功后的跳转URL地址.
该condition支持精确匹配和starts-with匹配方式.
success_action_status未指定success_action_redirect时,上传成功后的返回状态码.
该condition支持精确匹配和starts-with匹配方式.
x-oss-meta-*用户指定的usermeta.
该condition支持精确匹配和starts-with匹配方式.
Conditions匹配方式描述精确匹配表单域的值必须精确匹配conditions中声明的值.
如指定key表单域的值必须为a:{"key":"a"}同样可以写为:["eq","$key","a"]StartsWith表单域的值必须以指定值开始.
例如指定key的值必须以/user/user1开始:["starts-with","$key","/user/user1"]指定文件大小指定所允许上传的文件最大大小和最小大小,例如允许的文件大小为1到10字节:["content-length-range",1,10]转义字符描述对象存储OSSAPI参考881.
2.
3.
-PostSignature对于验证的Post请求,HTML表单中必须包含policy和Signature信息.
policy控制请求中那些值是允许的.
计算Signature的具体流程为:创建一个UTF-8编码的policy.
将policy进行base64编码,其值即为policy表单域该填入的值,将该值作为将要签名的字符串.
使用AccessKeySecret对要签名的字符串进行签名,签名方法与Head中签名的计算方法相同(将要签名的字符串替换为policy即可).
示例DemoWeb端表单直传OSS示例Demo:点击这里上传回调用户只需要在发送给OSS的请求中携带相应的Callback参数,即能实现回调.
现在支持CallBack的API接口有:PutObject、PostObject、CompleteMultipartUpload.
构造CallBack参数CallBack参数是由一段经过base64编码的Json字串,用户关键需要指定请求回调的服务器URL(callbackUrl)以及回调的内容(callbackBody).
详细的Json字段如下:\/斜杠\反斜杠\"双引号\$美元符\b空格\f换页\n换行\r回车\t水平制表符\uxxxxUnicode字符字段含义callbackUrl-文件上传成功后OSS向此url发送回调请求,请求方法为必选项对象存储OSSAPI参考89POST,body为callbackBody指定的内容.
正常情况下,该url需要响应"HTTP/1.
1200OK",body必须为JSON格式,响应头Content-Length必须为合法的值,且不超过3MB.
-支持同时配置最多5个url,以";"分割.
OSS会依次发送请求直到第一个返回成功为止.
-如果没有配置或者值为空则认为没有配置callback.
-支持HTTPS地址.
-为了保证正确处理中文等情况,callbackUrl需做url编码处理,比如http://example.
com/中文.
phpkey=value&中文名称=中文值需要编码成http://example.
com/%E4%B8%AD%E6%96%87.
phpkey=value&%E4%B8%AD%E6%96%87%E5%90%8D%E7%A7%B0=%E4%B8%AD%E6%96%87%E5%80%BCcallbackHost-发起回调请求时Host头的值,只有在设置了callbackUrl时才有效.
-如果没有配置callbckHost,则会解析callbackUrl中的url并将解析出的host填充到callbackHost中可选项callbackBody-发起回调时请求body的值,例如:key=$(key)&etag=$(etag)&my_var=$(x:my_var).
-支持OSS系统变量、自定义变量和常量,支持的系统变量如下表所示.
自定义变量的支持方式在PutObject和CompleteMultipart中是通过callback-var来传递,在PostObject中则是将各个变量通过表单域来传递.
必选项callbackBodyType-发起回调请求的Content-Type,支持application/x-www-form-urlencoded和application/json,默认为前者.
-如果为application/x-www-form-urlencoded,则callbackBody中的变量将会被经过url编码的值替换掉,如果为application/json,则会按照json格式替换其中的变量.
可选项对象存储OSSAPI参考90示例json串如下其中callbackBody中可以设置的系统变量有,其中imageInfo针对于图片格式,如果为非图片格式都为空:自定义参数用户可以通过callback-var参数来配置自定义参数.
自定义参数是一个Key-Value的Map,用户可以配置自己需要的参数到这个Map.
在OSS发起POST回调请求的时候,会将这些参数和上一节所述的系统参数一起放在POST请求的body中以方便接收回调方获取.
构造自定义参数的方法和callback参数的方法是一样的,也是以json格式来传递.
该json字符串就是一个包含所有自定义参数的Key-Value的Map.
这里有个特别需要注意的地方就是,用户自定义参数的Key一定要以x:开头,且必须为小写.
否则OSS会返回错误.
假定用户需要设定两个自定义的参数分别为x:var1和x:var2,对应的值分别为value1和value2,那么构造出来的json格式如下:{"callbackUrl":"121.
101.
166.
30/test.
php","callbackHost":"oss-cn-hangzhou.
aliyuncs.
com","callbackBody":"{\"mimeType\":${mimeType},\"size\":${size}}","callbackBodyType":"application/json"}{"callbackUrl":"121.
43.
113.
8:23456/index.
html","callbackBody":"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.
height=${imageInfo.
height}&imageInfo.
width=${imageInfo.
width}&imageInfo.
format=${imageInfo.
format}&my_var=${x:my_var}"}系统变量含义bucketbucketobjectobjectetag文件的etag,即返回给用户的etag字段sizeobject大小,CompleteMultipartUpload时为整个object的大小mimeType资源类型,如jpeg图片的资源类型为image/jpegimageInfo.
height图片高度imageInfo.
width图片宽度imageInfo.
format图片格式,如jpg、png等{"x:var1":"value1",对象存储OSSAPI参考91------构造回调请求构造完成上述的callback和callback-var两个参数之后,一共有三种方式传给OSS.
其中callback为必填参数,callback-var为可选参数,如果没有自定义参数的话可以不用添加callback-var字段.
这三种方式如下:在URL中携带参数.
在Header中携带参数.
在POST请求的body中使用表单域来携带参数,在使用POST请求上传Object的时候只能使用这种方式来指定回调参数.
这三种方式只能同时使用其中一种,否则OSS会返回InvalidArgument错误.
要将参数附加到OSS的请求中,首先要将上文构造的json字符串使用base64编码,然后按照如下的方法附加到OSS的请求中:如果在URL中携带参数.
把callback=[CallBack]或者callback-var=[CallBackVar]作为一个url参数带入请求发送.
计算签名CanonicalizedResource时,将callback或者callback-var当做一个sub-resource计算在内如果在Header中携带参数.
把x-oss-callback=[CallBack]或者x-oss-callback-var=[CallBackVar]作为一个head带入请求发送.
在计算签名CanonicalizedOSSHeaders时,将x-oss-callback-var和x-oss-callback计算在内.
如下示例:如果需要在POST上传Object的时候附带回调参数会稍微复杂一点,callback参数要使用独立的表单域来附加,如下面的示例:"x:var2":"值2"}PUT/test.
txtHTTP/1.
1Host:callback-test.
oss-test.
aliyun-inc.
comAccept-ncoding:identityContent-Length:5x-oss-callback-var:eyJ4Om15X3ZhciI6ImZvci1jYWxsYmFjay10ZXN0In0=User-Agent:aliyun-sdk-python/0.
4.
0(Linux/2.
6.
32-220.
23.
2.
ali1089.
el5.
x86_64/x86_64;2.
5.
4)x-oss-callback:eyJjYWxsYmFja1VybCI6IjEyMS40My4xMTMuODoyMzQ1Ni9pbmRleC5odG1sIiwgICJjYWxsYmFja0JvZHkiOiJidWNrZXQ9JHtidWNrZXR9Jm9iamVjdD0ke29iamVjdH0mZXRhZz0ke2V0YWd9JnNpemU9JHtzaXplfSZtaW1lVHlwZT0ke21pbWVUeXBlfSZpbWFnZUluZm8uaGVpZ2h0PSR7aW1hZ2VJbmZvLmhlaWdodH0maW1hZ2VJbmZvLndpZHRoPSR7aW1hZ2VJbmZvLndpZHRofSZpbWFnZUluZm8uZm9ybWF0PSR7aW1hZ2VJbmZvLmZvcm1hdH0mbXlfdmFyPSR7eDpteV92YXJ9In0=Host:callback-test.
oss-test.
aliyun-inc.
comExpect:100-ContinueDate:Mon,14Sep201512:37:27GMTContent-Type:text/plainAuthorization:OSSmlepou3zr4u7b14:5a74vhd4UXpmyuudV14Kaen5cY4=Test对象存储OSSAPI参考92如果拥有自定义参数的话,不能直接将callback-var参数直接附加到表单域中,每个自定义的参数都需要使用独立的表单域来附加,举个例子,如果用户的自定义参数的json为那么POST请求的表单域应该如下:同时可以在policy中添加callback条件(如果不添加callback,则不对该参数做上传验证)如:发起回调请求--9431149156168Content-Disposition:form-data;name="callback"eyJjYWxsYmFja1VybCI6IjEwLjEwMS4xNjYuMzA6ODA4My9jYWxsYmFjay5waHAiLCJjYWxsYmFja0hvc3QiOiIxMC4xMDEuMTY2LjMwIiwiY2FsbGJhY2tCb2R5IjoiZmlsZW5hbWU9JChmaWxlbmFtZSkmdGFibGU9JHt4OnRhYmxlfSIsImNhbGxiYWNrQm9keVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifQ=={"x:var1":"value1","x:var2":"value2"}--9431149156168Content-Disposition:form-data;name="callback"eyJjYWxsYmFja1VybCI6IjEwLjEwMS4xNjYuMzA6ODA4My9jYWxsYmFjay5waHAiLCJjYWxsYmFja0hvc3QiOiIxMC4xMDEuMTY2LjMwIiwiY2FsbGJhY2tCb2R5IjoiZmlsZW5hbWU9JChmaWxlbmFtZSkmdGFibGU9JHt4OnRhYmxlfSIsImNhbGxiYWNrQm9keVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifQ==--9431149156168Content-Disposition:form-data;name="x:var1"value1--9431149156168Content-Disposition:form-data;name="x:var2"value2{"expiration":"2014-12-01T12:00:00.
000Z","conditions":[{"bucket":"johnsmith"},{"callback":"eyJjYWxsYmFja1VybCI6IjEwLjEwMS4xNjYuMzA6ODA4My9jYWxsYmFjay5waHAiLCJjYWxsYmFja0hvc3QiOiIxMC4xMDEuMTY2LjMwIiwiY2FsbGJhY2tCb2R5IjoiZmlsZW5hbWU9JChmaWxlbmFtZSkiLCJjYWxsYmFja0JvZHlUeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn0="},["starts-with","$key","user/eric/"],]}对象存储OSSAPI参考93如果文件上传成功,OSS会根据用户的请求中的callback参数和自定义参数(callback-var参数),将特定内容以POST方式发送给应用服务器.
返回回调结果比如应用服务器端返回的回应请求为:返回上传结果再给客户端的内容为:需要注意的是,如果类似CompleteMultipartUpload这样的请求,在返回请求本身body中存在内容(如XMl格式的信息),使用上传回调功能后会覆盖原有的body的内容如{"a":"b"},希望对此处做好判断处理.
ftlcloud怎么样?ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。点击进入:ftlcloud官方网站...
paypal贝宝可撸$10的代金券!这两天paypal出了活动,本次并没有其他的限制,只要注册国区的paypal,使用国内的手机号和62开头的银联卡,就可以获得10美元的代金券,这个代金券购买产品需要大于10.1美元,站长给大家推荐几个方式,可以白嫖一年的VPS,有需要的朋友可以看看比较简单。PayPal送10美元活动:点击直达活动sfz与绑定卡的号码可以重复用 注册的邮箱,手机号与绑的银联卡必须...
vollcloud LLC首次推出6折促销,本次促销福利主要感恩与回馈广大用户对于我们的信任与支持,我们将继续稳步前行,为广大用户们提供更好的产品和服务,另外,本次促销码共限制使用30个,个人不限购,用完活动结束,同时所有vps产品支持3日内无条件退款和提供免费试用。需要了解更多产品可前往官网查看!vollcloud优惠码:VoLLcloud终生6折促销码:Y5C0V7R0YW商品名称CPU内存S...