前言

本文档是阿里云存储服务(OSS)的开发帮助指南,描述了OSS中的基本概念、提供的服务以及可用的API。

阿里云存储服务(OpenStorageService,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务。用户可以通过简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据,也可以使用WEB页面对数据进行管理。同时,OSS提供Java、

Python、 PHP、C#语言的SDK,简化用户的编程。基于OSS,用户可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。

在OSS中,用户操作的基本数据单元是Object。单个Object最大允许存储5TB的数据。Object包含key、meta和data。其中,key是Object的名字;meta是用户对该object的描述,由一系列name-value对组成;data是Object的数据。

nObject命名规范

Ø使用UTF-8编码

Ø长度必须在1-1023字节之间

Ø不能以“/”或者“\”字符开头

Bucket是OSS上的命名空间,也是计费、权限控制、日志记录等高级功能的管理实体;Bucket名称在整个OSS服务中具有全局唯一性,且不能修改;存储在OSS上的每个Object必须都包含在某个Bucket中。一个应用,例如图片分享网站,可以对应一个或多个Bucket。一个用户最多可创建10个Bucket,但每个Bucket中存放的Object的数量和大小总和没有限制,用户不需要考虑数据的可扩展性。

nBucket命名规范

Ø只能包括小写字母,数字,短横线(-)

Ø必须以小写字母或者数字开头

Ø长度必须在3-63字节之间

2.3Access Key ID、Access KeySecret

用户注册OSS时,系统会给用户分配一对Access Key ID和Access Key Secret,称为ID对,用于标识用户,为访问OSS做签名验证。

OSS提供给用户的虚拟存储空间,在这个虚拟空间中,每个用户可拥有一个到多个Bucket。

1.

2.

3.

OSS为用户提供数据存储服务,用户可以通过以下操作来处理OSS上的数据:

n创建、查看、罗列、删除Bucket

n修改、获取Bucket的访问权限

n上传、查看、罗列、删除、批量删除Object

n对于大文件支持分片上传(Multi-Part Upload)

n访问时支持If-Modified-Since和If-Match等HTTP参数

3.2Object外链地址的构成规则

如果一个bucket设置成公开读权限(详见下一章:访问控制),意味着你允许其他用户来访问属于你的object。你的object的外链地址构成规则如下:

http:// .oss.aliyuncs.com/

例如,在一个名为oss-example的bucket中,有一个名为"aliyun-log.png"的object(content-type为image/png)。那么这个object的外链URL为:

构成规则的示意图如下:

用户可以直接该URL链接放入HTML中使用:

src="http://oss-example.oss.aliyuncs.com/aliyun-logo.png"/>

OSS是按使用收费的服务,为了防止用户在OSS上的数据被其他人盗链,OSS支持基于HTTP header中表头字段referer的防盗链方法。目前,只有通过OSS的控制台(http://oss.aliyun.com)可以对一个bucket设置referer字段的白名单和是否允许referer字段为空的请求访问。例如,对于一个名为oss-example的bucket,设置其referer白名单为中的Object。

细节分析:

1)用户只有通过URL签名或者匿名访问Object时,才会做防盗链验证。请求的Header中有“Authorization”字段的,不会做防盗链验证。

2)一个bucket可以支持多个referer参数,这些参数之间由“,”号分隔。

3)Referer参数支持通配符“*”和“?”。

4)用户可以设置是否允许referer字段为空的请求访问。

5)白名单为空时,不会检查referer字段是否为空(不然所有的请求都会被拒绝)。

6)白名单不为空,且设置了不允许referer字段为空的规则;则只有referer属于白名单的请求被允许,其他请求(包括referer为空的请求)会被拒绝。

7)如果白名单不为空,但设置了允许referer字段为空的规则;则referer为空的请求和符合白名单的请求会被允许;其他请求都会被拒绝。

8)Bucket的三种权限(private,public-read,public-read-write)都会检查referer字段。

注意:OSS更多的防盗链的规则正在开发中。

3.4自定义域名绑定(CNAME)

OSS支持用户将自定义的域名绑定在属于自己的bucket上面,这个操作必须通过OSS控制台(http://oss.aliyun.com)来实现。按照中国《互联网管理条例》的要求,所有需要开通这项功能的用户,必须提供阿里云备案号,域名持有者身份证等有效资料,经由阿里云审批通过后才可以使用。在开通CNAME功能后,OSS将自动处理对该域名的访问请求。

CNAME应用场景例子:

Ø用户A拥有一个域名为abc.com的网站;这个网站的所有图片存储在img.abc.com这个子域名下;

Ø为了应对日益增长的图片流量压力,用户A在OSS上创建了一个名为abc-img的bucket,并将所有图片存在OSS上;

Ø通过OSS控制台,提交将img.abc.com CNAME成abc-img.oss.aliyuncs.com的申请,并提供相应的材料

Ø通过阿里云审核后,在自己的域名服务器上,添加一条CNAME规则,将img.abc.com映射成abc-img.oss.aliyuncs.com,这样所有对img.abc.com的访问都将变成访问abc-img这个bucket。例如:一个对的访问,实际上访问的是。

3.5访问日志记录[2](Server Access Logging)

OSS为用户提供自动保存访问日志记录功能。Bucket的拥有者可以通过OSS控制台(http://oss.aliyun.com),为其所拥有的bucket开启访问日志记录功能。当一个bucket(源Bucket,Source Bucket)开启访问日志记录功能后,OSS自动将访问这个bucket的请求日志,以小时为单位,按照固定的命名规则,生成一个Object写入用户指定的bucket(目标Bucket,Target Bucket)。

存储访问日志记录的object命名规则:

-YYYY-mm-DD-HH-MM-SS-UniqueString

命名规则中,TargetPrefix由用户指定;YYYY,mm,DD,HH,MM和SS分别是该Object被创建时的阿拉伯数字的年,月,日,小时,分钟和秒(注意位数);UniqueString为OSS系统生成的字符串。一个实际的用于存储OSS访问日志的Object名称例子如下:

MyLog-oss-example-2012-09-10-04-00-00-0000

上例中,“MyLog-”是用户指定的Object前缀;“oss-example”是源bucket的名称;“2012-09-10-04-00-00”是该Object被创建时的北京时间;“0000” 是OSS系统生成的字符串。

LOG文件格式(从左至右,以空格分隔):

名称

例子

含义

Remote IP

119.140.142.11

请求发起的IP地址(Proxy代理或用户防火墙可能会屏蔽该字段)

Reserved

-

保留字段

Reserved

-

保留字段

Time

[02/May/2012:00:00:04

+0800]

OSS收到请求的时间

Request-URI

“GET /aliyun-logo.png

HTTP/1.1“

用户请求的URI(包括query-string)

HTTP Status

200

OSS返回的HTTP状态码

SentBytes

5576

用户从OSS下载的流量

RequestTime (ms)

71

完成本次请求的时间(毫秒)

Referrer

http://oss.aliyun.com

请求的HTTP Referrer

User-Agent

curl/7.15.5

HTTP的User-Agent头

HostName

oss-example.oss.aliyuncs.com

请求访问域名

Request ID

505B01695037C2AF032593A4

用于唯一标示该请求的UUID

LoggingFlag

true

是否开启了访问日志功能

Reserved

-

保留字段

Requester Aliyun ID

1657136103983691

请求者的阿里云ID;匿名访问为“-”

Operation

GetObject

请求类型

Bucket

oss-example

请求访问的Bucket名字

Key

/aliyun-logo.png

用户请求的Key

ObjectSize

5576

Object大小

Server Cost Time (ms)

17

OSS服务器处理本次请求所花的时间(毫秒)

Error Code

NoSuchBucket

OSS返回的错误码

UserID

1657136103983691

Bucket拥有者ID

Delta DataSize

280

Bucket大小的变化量;若没有变化为“-”

细节分析:

1)源Bucket和目标Bucket必须属于同一个用户。

2)“TargetPrefix”表示存储访问日志记录的object名字前缀,可以为空。

3)源bucket和目标bucket可以是同一个Bucket,也可以是不同的Bucket;用户也可以将多个的源bucket的LOG都保存在同一个目标bucket内(建议指定不同的TargetPrefix)。

4)OSS以小时为单位生成bucket访问的Log文件,但并不表示这个小时的所有请求都记录在这个小时的LOG文件内,也有可能出现在上一个或者下一个LOG文件中。

5)OSS生成的Log文件命名规则中的“UniqueString”仅仅是OSS为其生成的UUID,用于唯一标识该文件。

6)OSS生成一个bucket访问的Log文件,算作一次PUT操作,并记录其占用的空间,但不会记录产生的流量。LOG生成后,用户可以按照普通的Object来操作这些LOG文件。

7)OSS会忽略掉所有以“x-”开头的query-string参数,但这个query-string会被记录在访问LOG中。如果你想从海量的访问日志中,标示一个特殊的请求,可以在URL中添加一个“x-”开头的query-string参数。如:

http://oss-example.oss.aliyuncs.com/aliyun-logo.png

http://oss-example.oss.aliyuncs.com/aliyun-logo.png?x-user=admin

OSS处理上面两个请求,结果是一样的。但是在访问LOG中,你可以通过搜索“x-user=admin”,很方便地定位出经过标记的这个请求。

8)OSS的LOG中的任何一个字段,都可能出现“-”,用于表示未知数据或对于当前请求该字段无效。

9)根据需求,OSS的LOG格式将来会在尾部添加一些字段,请开发者开发Log处理工具时考虑兼容性的问题。

OSS通过使用Access Key ID/ Access Key Secret对称加密的方法来验证某个请求的发送者身份。Access Key ID用于标示用户,Access Key Secret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,其中Access Key Secret必须保密,只有用户和OSS知道。每个ACCESS Key对(Access Key ID和Access Key Secret)都有active/inactive两种状态。

nactive表明用户可以用此ID对签名验证请求

ninactive表明用户暂停此ID对签名验证的功能

一个用户可以同时拥有0至2个active或者inactive的ID对。用户可以登录http://oss.aliyun.com/,在OSS管理控制台申请新增或删除ID对。

当用户想以个人身份向OSS发送请求时,需要首先将发送的请求按照OSS指定的格式生成签名字符串;然后使用Access Key Secret对签名字符串进行加密产生验证码。OSS收到请求以后,会通过Access Key ID找到对应的Access Key Secret,以同样的方法提取签名字符串和验证码,如果计算出来的验证码和提供的一样即认为该请求是有效的;否则,OSS将拒绝处理这次请求,并返回HTTP 403错误。

用户可以在HTTP请求中增加Authorization(授权)的Head来包含签名(Signature)信息,表明这个消息已被授权。

Authorization字段计算方法如下:

"Authorization: OSS

" + Access Key ID + ":" + Signature

Signature = base64(hmac-sha1(VERB

+ "\n"

+

CONTENT-MD5 + "\n"

+

CONTENT-TYPE + "\n"

+

DATE + "\n"

+

CanonicalizedOSSHeaders

+

CanonicalizedResource))

nCONTENT-MD5表示请求内容数据的MD5值

nCONTENT-TYPE表示请求内容的类型

nDATE表示此次操作的时间,且必须为HTTP1.1中支持的GMT格式

nCanonicalizedOSSHeaders表示http中的object meta组合

nCanonicalizedResource表示用户想要访问的OSS资源

其中,DATE和CanonicalizedResource不能为空;如果请求中的DATE时间和OSS服务器的时间差正负15分钟以上,OSS服务器将拒绝该服务,并返回HTTP 403错误。

构建CanonicalizedOSSHeaders的方法:

所有以“x-oss-”为前缀的HTTP Header被称为CanonicalizedOSSHeaders。它的构建方法如下:

1)将所有以“x-oss-”为前缀的HTTP请求头的名字转换成小写字母。如’X-OSS-Meta-Name: TaoBao’转换成’x-oss-meta-name: TaoBao’。

2)将上一步得到的所有HTTP请求头按照字典序进行升序排列。

3)如果有相同名字的请求头,则根据标准RFC 2616, 4.2章进行合并(两个值之间只用逗号分隔)。如有两个名为’x-oss-meta-name’的请求头,对应的值分别为’TaoBao’和’Alipay’,则合并后为:’x-oss-meta-name:TaoBao,Alipay’。

4)删除请求头和内容之间分隔符两端出现的任何空格。如’x-oss-meta-name: TaoBao,Alipay’转换成:’x-oss-meta-name:TaoBao,Alipay’。

5)将所有的头和内容用’\n’分隔符分隔拼成最后的CanonicalizedOSSHeader。

构建CanonicalizedResource的方法:

用户发送请求中想访问的OSS目标资源被称为CanonicalizedResource。它的构建方法如下:

1)将CanonicalizedResource置成空字符串(“”);

2)放入要访问的OSS资源:“ /BucketName/ObjectName”(无ObjectName则不填)

3)如果请求的资源包括子资源(sub-resource)[3],那么将所有的子资源按照字典序,从小到大排列并以’&’为分隔符生成子资源字符串。在CanonicalizedResource字符串尾添加“?”和子资源字符串。此时的CanonicalizedResource例子如:/BucketName/ObjectName?acl &uploadId=UploadId

4)如果用户请求在查询字符串(query string)中指定了要重写(override)返回请求的header[4],那么将这些查询字符串及其请求值按照字典序,从小到大排列,以’&’为分隔符,按参数的字典序添加到CanonicalizedResource中。此时的CanonicalizedResource例子:

/BucketName/ObjectName?acl&response-content-type=ContentType

& uploadId =UploadId

例如:想签名以下信息:

PUT /nelson HTTP/1.0

Content-Md5:

c8fdb181845a4ca6b8fec737b3581d76

Content-Type:

text/html

Date: Thu, 17 Nov 2005

18:49:58 GMT

Host: oss-example.oss.aliyuncs.com

X-OSS-Meta-Author:

foo@bar.com

X-OSS-Magic:

abracadabra

假如Access Key ID是:"44CF9590006BF252F707"

Access Key

Secret是"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV",可用以下方法签名(Signature):

python示例代码:

import base64

import hmac

import sha

h =

hmac.new("OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV",

"PUT\nc8fdb181845a4ca6b8fec737b3581d76\ntext/html\nThu, 17 Nov

2005 18:49:58 GMT\nx-oss-magic:abracadabra\nx-oss-meta-author:foo@bar.com\n/oss-example/nelson",

sha)

base64.encodestring(h.digest()).strip()

签名(Signature)计算结果应该为”63mwfl+zYIOG6k95yxbgMruQ6QI=”, 然后加上Authorization头来组成最后需要发送的消息:

PUT /nelson HTTP/1.0

Authorization: OSS

44CF9590006BF252F707: 63mwfl+zYIOG6k95yxbgMruQ6QI=

Content-Md5:

c8fdb181845a4ca6b8fec737b3581d76

Content-Type:

text/html

Date: Thu, 17 Nov 2005

18:49:58 GMT

Host: oss-example.oss.aliyuncs.com

X-OSS-Meta-Author:

foo@bar.com

X-OSS-Magic: abracadabra

在计算签名头的时候请遵循如下规则:

1)用来签名的字符串必须为UTF-8格式。含有中文字符的签名字符串必须先进行UTF-8编码,再与Access Key Secret计算最终签名。

3)content-type和content-md5在请求中不是必须的,但是如果请求需要签名验证,空值的话以换行符“\n”代替。

4)在所有非HTTP标准定义的header中,只有以“x-oss-”开头的header,需要加入签名字符串;其他非HTTP标准header将被OSS忽略(如上例中的x-oss-magic)。

5)以“x-oss-”开头的head在签名验证前需要符合以下规范:

Øhead的名字需要变成小写。

Øhead按字典序自小到大排序。

Ø分割head name和value的冒号前后不能有空格。

Ø每个Head之后都有一个换行符“\n”,如果没有Head,CanonicalizedOSSHeaders就设置为空。

细节分析:

1)如果传入的Access Key ID不存在或inactive,返回403 Forbidden。错误码:InvalidAccessKeyId。

2)若用户请求头中Authorization值的格式不对,返回400

Bad Request。错误码:InvalidArgument。

3)OSS所有的请求都必须使用HTTP 1.1协议规定的。其中,日期的格式有三种:

date1 = 2DIGIT SP month SP 4DIGIT; day month year (e.g., 02 Jun

1982)

date2 = 2DIGIT "-" month "-" 2DIGIT; day-month-year

(e.g., 02-Jun-82)

date3 = month SP ( 2DIGIT | ( SP 1DIGIT )); month day (e.g., Jun2)【注意“2”前面有两个空格】

上述这三种日期格式中,“天”所占位数都是“2 DIGIT”。因此,“Jun 2”、“2 Jun 1982”和“2-Jun-82”都是非法日期格式。

4)如果签名验证的时候,头中没有传入Date或者格式不正确,返回403

Forbidden错误。错误码:AccessDenied。

5)传入请求的时间必须在OSS服务器当前时间之后的15分钟以内,否则返回403 Forbidden。错误码:RequestTimeTooSkewed。

6)如果Access Key ID是active的,但OSS判断用户的请求发生签名错误,则返回403 Forbidden,并在返回给用户的response中告诉用户正确的用于验证加密的签名字符串。用户可以根据OSS的response来检查自己的签名字符串是否正确。

返回示例:

version="1.0" encoding="UTF-8"?>

SignatureDoesNotMatch

The

request signature we calculated does not match the signature you provided.

Check your key and signing method.

47

45 54 0a 0a 0a 57 65 64 2c 20 31 31 20 4d 61 79 20 32 30 31 31 20 30 37 3a 35

39 3a 32 35 20 47 4d 54 0a 2f 75 73 72 65 61 6c 74 65 73 74 3f 61 63 6c

1E446260FF9B10C2

oss.aliyuncs.com

y5H7yzPsA/tP4+0tH1HHvPEwUv8=

GET

Wed,

11 May 2011 07:59:25 GMT

/oss-example?acl

AKIAIVAKMSMOY7VOMRWQ

除了使用Authorization Head,用户还可以在URL中加入签名信息,这样用户就可以把该URL转给第三方实现授权访问。

URL中包含签名示例:

http://oss-example.oss.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=44CF9590006BF252F707&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D

在URL中实现签名,必须至少包含Signature,Expires,OSSAccessKeyId三个参数。Expires这个参数的值是一个UNIX时间(自UTC时间1970年1月1号开始的秒数,详见),用于标识该URL的超时时间。如果OSS接收到这个URL请求的时候晚于签名中包含的Expires参数时,则返回请求超时的错误码。例如:当前时间是1141889060,开发者希望创建一个60秒后自动失效的URL,则可以设置Expires时间为1141889120。

所有的OSS支持的请求和各种Head参数,在URL中进行签名的方法和上节介绍的签名算法基本一样。主要区别如下:

1)通过URL包含签名时,之前的Date参数换成Expires参数。

2)不支持同时在URL和Head中包含签名。

3)如果传入的Signature,Expires,OSSAccessKeyId出现不止一次,以第一次为准。

4)请求先验证请求时间是否晚于Expires时间,然后再验证签名。

URL中添加签名的python示例代码为:

import base64

import hmac

import sha

import urllib

h = hmac.new("OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV",

"GET\n\n\n1141889120\n/oss-example/oss-api.pdf",

sha)

urllib.quote_plus (base64.encodestring(h.digest()).strip())

细节分析:

1)使用在URL中签名的方式,会将你授权的数据在过期时间以内曝露在互联网上,请预先评估使用风险。

2)PUT和GET请求都支持在URL中签名。

3)在URL中添加签名时,Signature,Expires,OSSAccessKeyId顺序可以交换,但是如果Signature,Expires,OSSAccessKeyId缺少其中的一个或者多个,返回403 Forbidden。错误码:AccessDenied。

4)如果访问的当前时间晚于请求中设定的Expires时间,返回403 Forbidden。错误码:AccessDenied。

5)如果传入请求时间,必须在OSS服务器当前时间之后的15分钟以内。否则返回403 Forbidden。错误码:RequestTimeTooSkewed。

6)如果Expires时间格式错误,返回403 Forbidden。错误码:AccessDenied。

7)如果URL中包含参数Signature,Expires,OSSAccessKeyId中的一个或者多个,并且Head中也包含签名消息,返回消息400 Bad Request。错误码:InvalidArgument。

8)生成签名字符串时,除Date被替换成Expires参数外,仍然包含content-type、content-md5等上节中定义的Header。(请求中虽然仍然有Data这个请求头,但不需要将Data加入签名字符串中)

OSS提供Bucket级别的权限访问控制,Bucket目前有三种访问权限:public-read-write,public-read和private,它们的含义如下:

npublic-read-write:任何人(包括匿名访问)都可以对该bucket中的object进行PUT,Get和Delete操作;所有这些操作产生的费用由该bucket的创建者承担,请慎用该权限。

npublic-read:只有该bucket的创建者可以对该bucket内的Object进行写操作(包括Put和Delete Object);任何人(包括匿名访问)可以对该bucket中的object进行读操作(Get Object)。

nprivate:只有该bucket的创建者可以对该bucket内的Object进行读写操作(包括Put、Delete和Get Object);其他人无法访问该Bucket内的Object。

用户新创建一个新Bucket时,如果不指定Bucket权限,OSS会自动为该Bucket设置private权限。对于一个已经存在的Bucket,只有它的创建者可以通过OSS的Put Bucket Acl接口修改该Bucket的权限。

相关阅读:

Ø

本章主要介绍OSS的开放接口。开发者在发送请求给OSS时,既可以使用带签名认证的请求,也可以使用匿名访问。当签名验证错误或者是访问没有权限的资源时,OSS返回的错误码请参考下一章,本章就不在举例了。

OSS的RESTful接口中使用了一些公共请求头。这些请求头可以被所有的OSS请求所使用,其详细定义如下:

名称

描述

Authorization

用于验证请求合法性的认证信息。

类型:字符串

默认值:无

使用场景:非匿名请求

Content-Length

RFC 2616中定义的HTTP请求内容长度。

类型:字符串

默认值:无

使用场景:需要向OSS提交数据的请求

Content-Type

RFC

2616中定义的HTTP请求内容类型。

类型:字符串

默认值:无

使用场景:需要向OSS提交数据的请求

Date

HTTP 1.1协议中规定的GMT时间,例如:Wed,

05 Sep. 2012 23:00:00 GMT

类型:字符串

默认值:无

Host

访问Host值,格式为:.oss.aliyuncs.com。

类型:字符串

默认值:无

OSS的RESTful接口中使用了一些公共响应头。这些响应头可以被所有的OSS请求所使用,其详细定义如下:

名称

描述

Content-Length

RFC 2616中定义的HTTP请求内容长度。

类型:字符串

默认值:无

使用场景:需要向OSS提交数据的请求

Connection

标明客户端和OSS服务器之间的链接状态。

类型:枚举

有效值:open |

close

默认值:无

Date

HTTP 1.1协议中规定的GMT时间,例如:Wed,

05 Sep. 2012 23:00:00 GMT

类型:字符串

默认值:无

ETag

ETag

(entity tag)在每个Object生成的时候被创建,用于标示一个Object的内容。对于Put

Object请求创建的Object,ETag值是其内容的MD5值;对于其他方式创建的Object,ETag值是其内容的UUID。ETag值可以用于检查Object内容是否发生变化。

类型:字符串

默认值:无

Server

生成Response的服务器。

类型:字符串

默认值:AliyunOSS

x-oss-request-id

x-oss-request-id是由Aliyun

OSS创建,并唯一标识这个response的UUID。如果在使用OSS服务时遇到问题,可以凭借该字段联系OSS工作人员,快速定位问题。

类型:字符串

默认值:无

对于服务地址作Get请求可以返回请求者拥有的所有Bucket,其中“/”表示根目录。

请求语法:

GET / HTTP/1.1

Host: oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

响应元素(Response Elements)

名称

描述

Bucket

保存bucket信息的容器.

类型:容器

子节点:Name,

CreationDate

父节点:ListAllMyBucketsResult.Buckets

Buckets

保存多个Bucket信息的容器。

类型:容器

子节点:Bucket

父节点:ListAllMyBucketsResult

CreateDate

Bucket创建时间

类型:时间(格式:yyyy-mm-ddThh:mm:ss.timezone,

e.g.,

2011-12-01T12:27:13.000Z)

父节点:ListAllMyBucketsResult.Buckets.Bucket

DisplayName

Bucket拥有者的名称(目前和ID一致)。

类型:字符串

父节点:ListAllMyBucketsResult.Owner

ID

Bucket拥有者的用户ID。

类型:字符串

父节点:ListAllMyBucketsResult.Owner

ListAllMyBucketsResult

保存Get

Service请求结果的容器。

类型:容器

子节点:

Owner, Buckets

父节点:None

Name

Bucket名称。

类型:字符串

父节点:ListAllMyBucketsResult.Buckets.Bucket

Owner

用于存放Bucket拥有者信息的容器。

类型:容器

父节点:ListAllMyBucketsResult

细节分析:

1)GetService这个API只对验证通过的用户有效。

2)如果请求中没有用户验证信息(即匿名访问),返回403 Forbidden。错误码:AccessDenied。

请求示例:

GET / HTTP/1.1

Host: oss.aliyuncs.com

Date: Fri, 24 Feb 2012

02:58:28 GMT

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:MiorP5BDFDhKAn44wDnkSSv2Z94=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 60633d3c-1293-0d72-7739-759423f02d36

Date: Fri, 24 Feb 2012

02:58:28 GMT

Content-type: application/xml

Content-Length: 685

Connection: close

Server: AliyunOSS

version="1.0" encoding="UTF-8"?>

xmlns=”http://doc.oss.aliyuncs.com”>

00220120222

oss_doc

multipart_upload

2012-02-22T08:25:07.000Z

my_oss

2012-02-24T02:53:26.000Z

相关阅读:

5.3.1Delete Bucket

Delete Bucket用于删除某个Bucket。

请求语法:

DELETE / HTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

细节分析:

1)如果Bucket不存在,返回404 no content错误。错误码:NoSuchBucket。

2)为了防止误删除的发生,OSS不允许用户删除一个非空的Bucket。

3)如果试图删除一个不为空的Bucket,返回409 Conflict错误,错误码:BucketNotEmpty。

4)只有Bucket的拥有者才能删除这个Bucket。如果试图删除一个没有对应权限的Bucket,返回403 Forbidden错误。错误码:AccessDenied。

请求示例:

DELETE / HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 05:31:04 GMT

Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:ceOEyZavKY4QcjoUWYSpYbJ3naA=

返回示例:

HTTP/1.1 204 No Content

x-oss-request-id: 7faf664d-0cad-852e-4b38-2ac2232e7e7f

Date: Fri, 24 Feb 2012 05:31:04 GMT

Connection: close

Content-Length: 0

Server: AliyunOSS

相关阅读:

5.3.2Get Bucket (List Object)

Get Bucket操作可用来list Bucket中所有Object的信息。

请求语法:

GET / HTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

请求参数(Request Parameters):

GetBucket(ListObject)时,可以通过prefix,marker,delimiter和max-keys对list做限定,返回部分结果。

名称

描述

delimiter

是一个用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素——CommonPrefixes。

数据类型:字符串

默认值:无

marker

设定结果从marker之后按字母排序的第一个开始返回。

数据类型:字符串

默认值:无

max-keys

限定此次返回object的最大数,如果不设定,默认为1000,max-keys取值不能大于1000。

数据类型:字符串

默认值:100

prefix

限定返回的object

key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix。

数据类型:字符串

默认值:无

响应元素(Response Elements)

名称

描述

Contents

保存每个返回Object

meta的容器。

类型:容器

父节点:ListBucketResult

CommonPrefixes

如果请求中指定了delimiter参数,则在OSS返回的响应中包含CommonPrefixes元素。该元素标明那些以delimiter结尾,并有共同前缀的object名称的集合。

类型:字符串

父节点:ListBucketResult

Delimiter

是一个用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素——CommonPrefixes。

类型:字符串

父节点:ListBucketResult

DisplayName

Object拥有者的名字。

类型:字符串

父节点:ListBucketResult.Contents.Owner

ETag

ETag (entity tag)在每个Object生成的时候被创建,用于标示一个Object的内容。对于Put

Object请求创建的Object,ETag值是其内容的MD5值;对于其他方式创建的Object,ETag值是其内容的UUID。ETag值可以用于检查Object内容是否发生变化。

类型:字符串

父节点:ListBucketResult.Contents

ID

Bucket拥有者的用户ID。

类型:字符串

父节点:ListBucketResult.Contents.Owner

IsTruncated

指明是否所有的结果都已经返回;“true”标示所有结果都已经返回;“false”表示本次请求只返回了部分结果。

类型:枚举字符串

有效值:true |

false

父节点:ListBucketResult

Key

Object的Key.

类型:字符串

父节点:ListBucketResult.Contents

LastModified

Object最后被修改的时间。

类型:时间

父节点:ListBucketResult.Contents

ListBucketResult

保存Get

Bucket请求结果的容器.

类型:容器

子节点:Name,

Prefix, Marker, MaxKeys, Delimiter, IsTruncated, Nextmarker, Contents

父节点:None

Marker

标明这次Get

Bucket(List Object)的起点。

类型:字符串

父节点:ListBucketResult

MaxKeys

响应请求内返回结果的最大数目。

类型:字符串

父节点:ListBucketResult

Name

Bucket名字

类型:字符串

父节点:ListBucketResult

Owner

保存Bucket拥有者信息的容器。

类型:容器

子节点:DisplayName,

ID

父节点:ListBucketResult

Prefix

本次查询结果的开始前缀。

类型:字符串

父节点:ListBucketResult

Size

Object的字节数。

类型:字符串

父节点:ListBucketResult.Contents

StorageClass

Object的存储类型,目前只能是“Standard”

类型:字符串

父节点:ListBucketResult.Contents

细节分析:

1)Object中用户自定义的meta,在GetBucket请求时不会返回。

2)如果访问的Bucket不存在,包括试图访问因为命名不规范无法创建的Bucket,返回404 Not Found错误,错误码:NoSuchBucket。

3)如果没有访问该Bucket的权限,返回403 Forbidden错误,错误码:AccessDenied。

4)如果因为max-keys的设定无法一次完成listing,返回结果会附加一个,提示继续listing可以以此为marker。NextMarker中的值仍在list结果之中。

5)在做条件查询时,即使marker实际在列表中不存在,返回也从符合marker字母排序的下一个开始打印。如果max-keys小于0或者大于1000,将返回400 Bad

Request错误。错误码:InvalidArgument。

6)若prefix,marker,delimiter参数不符合长度要求,返回400 Bad Request。错误码:InvalidArgument。

7)prefix,marker用来实现分页显示效果,参数的长度必须小于1024字节。

8)如果把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,名字分别为:

loss.jpg

lfun/test.jpg

lfun/movie/001.avi

lfun/movie/007.avi

请求示例:

GET / HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 08:43:27 GMT

Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:BC+oQIXVR2/ZghT7cGa0ykboO4M=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 248c6483-2a95-622e-3022-ebe65d8aad5f

Date: Fri, 24 Feb 2012 08:43:27 GMT

Content-Type: application/xml

Content-Length: 1866

Connection: close

Server: AliyunOSS

oss-example

100

false

fun/movie/001.avi

2012-02-24T08:43:07.000Z

"5B3C1A2E053D763E1B002CC607C5A0FE"

Normal

344606

Standard

00220120222

user-example

fun/movie/007.avi

2012-02-24T08:43:27.000Z

"5B3C1A2E053D763E1B002CC607C5A0FE"

Normal

344606

Standard

00220120222

user-example

fun/test.jpg

2012-02-24T08:42:32.000Z

"5B3C1A2E053D763E1B002CC607C5A0FE"

Normal

344606

Standard

00220120222

user-example

oss.jpg

2012-02-24T06:07:48.000Z

"5B3C1A2E053D763E1B002CC607C5A0FE"

Normal

344606

Standard

00220120222

user-example

请求示例(含Prefix参数):

GET /?prefix=fun HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 08:43:27 GMT

Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:BC+oQIXVR2/ZghT7cGa0ykboO4M=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 25cb535f-1feb-1e90-2f22-12176bcb563e

Date: Fri, 24 Feb 2012 08:43:27 GMT

Content-Type: application/xml

Content-Length: 1464

Connection: close

Server: AliyunOSS

oss-example

fun

100

false

fun/movie/001.avi

2012-02-24T08:43:07.000Z

"5B3C1A2E053D763E1B002CC607C5A0FE"

Normal

344606

Standard

00220120222

user_example

fun/movie/007.avi

2012-02-24T08:43:27.000Z

"5B3C1A2E053D763E1B002CC607C5A0FE"

Normal

344606

Standard

00220120222

user_example

fun/test.jpg

2012-02-24T08:42:32.000Z

"5B3C1A2E053D763E1B002CC607C5A0FE"

Normal

344606

Standard

00220120222

user_example

请求示例(含prefix和delimiter参数):

GET /?prefix=fun/&delimiter=/ HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 08:43:27 GMT

Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:DNrnx7xHk3sgysx7I8U9I9IY1vY=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 0b05f9b1-539e-a858-0a81-9ca13d8a8011

Date: Fri, 24 Feb 2012 08:43:27 GMT

Content-Type: application/xml

Content-Length: 712

Connection: close

Server: AliyunOSS

oss-example

fun/

100

/

false

fun/test.jpg

2012-02-24T08:42:32.000Z

"5B3C1A2E053D763E1B002CC607C5A0FE"

Normal

344606

Standard

00220120222

user_example

fun/movie/

相关阅读:

5.3.3Get Bucket Acl

Get Bucket ACL用来获取某个Bucket的访问权限。

请求语法:

GET /?aclHTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

响应元素(Response Elements)

名称

描述

AccessControlList

存储ACL信息的容器

类型:容器

父节点:AccessControlPolicy

AccessControlPolicy

保存Get

Bucket ACL结果的容器

类型:容器

父节点:None

DisplayName

Bucket拥有者的名称.。(目前和ID一致)

类型:字符串

父节点:AccessControlPolicy.Owner

Grant

Bucket的ACL权限。

类型:枚举字符串

有效值:private

| public-read | public-read-write

父节点:AccessControlPolicy.AccessControlList

ID

Bucket拥有者的用户ID

类型:字符串

父节点:AccessControlPolicy.Owner

Owner

保存Bucket拥有者信息的容器。

类型:容器

父节点:AccessControlPolicy

细节分析:

1)只有Bucket的拥有者才能使用Get Bucket ACL这个接口。

请求示例:

GET /?acl HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 04:11:23 GMT

Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:CTkuxpLAi4XZ+WwIfNm0FmgbrQ0=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 6f720c98-40fe-6de0-047b-e7fb08c4059b

Date: Fri, 24 Feb 2012 04:11:23 GMT

Content-Length: 253

Content-Tupe: application/xml

Connection: close

Server: AliyunOSS

00220120222

user_example

public-read

相关阅读:

5.3.4Put Bucket

PutBucket用于创建Bucket(不支持匿名访问)。

请求语法:

PUT / HTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

细节分析:

1)如果请求的Bucket已经存在,并且请求者是所有者,同样返回200 OK成功。

2)如果请求的Bucket已经存在,但是不是请求者所拥有的,返回409 Conflict。错误码:BucketAlreadyExists。

3)如果想创建的Bucket不符合命名规范,返回400 Bad Request消息。错误码:InvalidBucketName。

4)如果用户发起PUT Bucket请求的时候,没有传入用户验证信息,返回403 Forbidden消息。错误码:AccessDenied。

5)如果PutBucket的时候发现已经超过bucket最大创建数——10时,返回400

Bad Request消息。错误码:TooManyBuckets。

6)创建的Bucket,如果没有指定访问权限,则默认使用“Private”权限。

请求示例:

PUT / HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 03:15:40 GMT

Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:77Dvh5wQgIjWjwO/KyRt8dOPfo8=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 7c9e8b71-3c6a-1b7d-2361-093f1af5f5e9

Date: Fri, 24 Feb 2012 03:15:40 GMT

Location: /oss-example

Content-Length: 0

Connection: close

Server: AliyunOSS

相关阅读:

5.3.5Put Bucket Acl

Put Bucket ACL接口用于修改Bucket访问权限。目前Bucket有三种访问权限:public-read-write,public-read和private。Put Bucket ACL操作通过Put请求中的“x-oss-acl”头来设置。这个操作只有该Bucket的创建者有权限执行。如果操作成功,则返回200;否则返回相应的错误码和提示信息。

请求语法:

PUT / HTTP/1.1

x-oss-acl:Permission

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

细节分析:

1)如果bucket存在,发送时带的权限和已有权限不一样,并且请求发送者是bucket拥有者时。该请求不会改变bucket内容,但是会更新权限。

2)如果用户发起Put Bucket请求的时候,没有传入用户验证信息,返回403 Forbidden消息。错误码:AccessDenied。

3)如果请求中没有,“x-oss-acl”头,并且该bucket已存在,并属于该请求发起者,则维持原bucket权限不变。

请求示例:

PUT / HTTP/1.1

x-oss-acl: public-read

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 03:21:12 GMT

Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 248c6483-2a95-622e-3022-ebe65d8aad5f

Date: Fri, 24 Feb 2012 03:21:12 GMT

Content-Length: 0

Connection: close

Server: AliyunOSS

如果该设置的权限不存在,示例400 Bad Request消息:

错误返回示例:

HTTP/1.1 400Bad Request

x-oss-request-id: 4e63c87a-71dc-87f7-11b5-583a600e0038

Date: Fri, 24 Feb 2012 03:55:00 GMT

Content-Length: 309

Content-Type: text/xml; charset=UTF-8

Connection: close

Server: AliyunOSS

InvalidArgument

error-acl

x-oss-acl

4e63c87a-71dc-87f7-11b5-583a600e0038

oss.aliyuncs.com

相关阅读:

5.4关于Object操作

拷贝一个在OSS上已经存在的object成另外一个object,可以发送一个PUT请求给OSS,并在PUT请求头中添加元素“x-oss-copy-source”来指定拷贝源。OSS会自动判断出这是一个Copy操作,并直接在服务器端执行该操作。如果拷贝成功,则返回新的object信息给用户。

请求语法:

PUT / /ObjectNameHTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

x-oss-copy-source: /SourceBucketName/SourceObjectName

请求Header:

名称

描述

x-oss-copy-source

复制源地址(必须有可读权限)

类型:字符串

默认值:无

x-oss-copy-source-if-match

如果源Object的ETAG值和用户提供的ETAG相等,则执行拷贝操作;否则返回412 HTTP错误码(预处理失败)。

类型:字符串

默认值:无

x-oss-copy-source-if-none-match

如果源Object自从用户指定的时间以后就没有被修改过,则执行拷贝操作;否则返回412 HTTP错误码(预处理失败)。

类型:字符串

默认值:无

x-oss-copy-source-if-unmodified-since

如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件,并返回200 OK;否则返回412

precondition failed错误。

类型:字符串

默认值:无

x-oss-copy-source-if-modified-since

如果源Object自从用户指定的时间以后被修改过,则执行拷贝操作;否则返回412 HTTP错误码(预处理失败)。

类型:字符串

默认值:无

x-oss-metadata-directive

有效值为COPY和REPLACE。如果该值设为COPY,则新的Object的meta都从源Object复制过来;如果设为REPLACE,则忽视所有源Object的meta值,而采用用户这次请求中指定的meta值;其他值则返回400

HTTP错误码。

类型:字符串

默认值:COPY

有效值:COPY |

REPLACE

响应元素(Response Elements):

名称

描述

CopyObjectResult

Copy Object结果

类型:字符串

默认值:无

ETag

新Object的ETag值。

类型:字符串

父元素:CopyObjectResult

LastModified

新Object最后更新时间。

类型:字符串

父元素:CopyObjectResult

细节分析:

1)可以通过拷贝操作来实现修改已有Object的meta信息。

2)如果拷贝操作的源Object地址和目标Object地址相同,则无论x-oss-metadata-directive为何值,都会直接替换源Object的meta信息。

3)OSS支持拷贝操作的四个预判断Header任意个同时出现,相应逻辑参见Get Object操作的细节分析。

4)拷贝操作需要请求者对源Object有读权限。

5)拷贝操作的计费统计会对源Object所在的Bucket增加一次Get请求次数,并对目标Object所在的Bucket增加一次Put请求次数,以及相应的新增存储空间。

6)拷贝操作涉及到的请求头,都是以“x-oss-”开头的,所以要加入签名字符串中。

请求示例:

PUT /copy_oss.jpg HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 07:18:48 GMT

x-oss-copy-source: /oss-example/oss.jpg

Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:gmnwPKuu20LQEjd+iPkL259A+n0=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 3dfb2597-72a0-b3f7-320f-8b6627a96e68

Content-Type: application/xml

Content-Length: 193

Connection: close

Date: Fri, 24 Feb 2012 07:18:48 GMT

Server: AliyunOSS

Fri, 24 Feb 2012 07:18:48 GMT

"5B3C1A2E053D763E1B002CC607C5A0FE"

相关阅读:

5.4.2Delete Object

DeleteObject用于删除某个Object。

请求语法:

DELETE /ObjectNameHTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

细节分析:

1)DeleteObject要求对该Object要有写权限。

2)如果要删除的Object不存在,OSS也返回状态码204( No

Content)。

3)如果Bucket不存在,返回404 Not Found。

请求示例:

DELETE /copy_oss.jpg HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 07:45:28 GMT

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:zUglwRPGkbByZxm1+y4eyu+NIUs=

返回示例:

HTTP/1.1 204 NoContent

x-oss-request-id: 1a61ecd1-5de8-4e2e-20b5-c66e135bc379

Date: Fri, 24 Feb 2012 07:45:28 GMT

Content-Length: 0

Connection: close

Server: AliyunOSS

相关阅读:

5.4.3Delete Multiple Objects

Delete Multiple Object操作支持用户通过一个HTTP请求删除同一个Bucket中的多个Object。Delete Multiple Object操作支持一次请求内最多删除1000个Object,并提供两种返回模式:详细(verbose)模式和简单(quiet)模式:

l详细模式:OSS返回的消息体中会包含每一个删除Object的结果。

l简单模式:OSS返回的消息体中只包含删除过程中出错的Object结果;如果所有删除都成功的话,则没有消息体。

请求语法:

POST /?delete HTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Content-Length:ContentLength

Content-MD5:MD5Value

Authorization:SignatureValue

true

key

请求元素(Request Elements):

名称

描述

Delete

保存Delete

Multiple Object请求的容器。

类型:容器

子节点:一个或多个Object元素,可选的Quiet元素

父节点:None.

Key

被删除Object的名字。

类型:字符串

父节点:Object

Object

保存一个Object信息的容器。

类型:容器

子节点:key

父节点:Delete.

Quiet

打开“安静”响应模式的开关。

类型:枚举字符串

有效值:true |

false

默认值:false

父节点:Delete

响应元素(Response Elements):

名称

描述

Deleted

保存被成功删除的Object的容器。

类型:容器

子节点:Key

父节点:DeleteResult

DeleteResult

保存Delete

Multiple Object请求结果的容器。

类型:容器

子节点:Deleted

父节点:None

Key

OSS执行删除操作的Object名字。

类型:字符串

父节点:Deleted

细节分析:

1)Delete

Multiple Object请求必须填Content-Length和Content-MD5字段。OSS会根据这些字段验证收到的消息体是正确的,之后才会执行删除操作。

2)生成Content-MD5字段内容方法:首先将Delete Multiple Object请求内容经过MD5加密后得到一个128位字节数组;再将该字节数组用base64算法编码;最后得到的字符串即是Content-MD5字段内容。

3)Delete

Multiple Object请求默认是详细(verbose)模式。

4)在Delete Multiple Object请求中删除一个不存在的Object,仍然认为是成功的。

5)Delete

Multiple Object的消息体最大允许2MB的内容,超过2MB会返回MalformedXML错误码。

6)Delete

Multiple Object请求最多允许一次删除1000个Object;超过1000个Object会返回MalformedXML错误码。

请求示例I:

POST /?delete HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Wed, 29 Feb 2012 12:26:16 GMT

Content-Length:151

Content-MD5:fae2e404736a78a0067b62d80b1cc7d8

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:+z3gBfnFAxBcBDgx27Y/jEfbfu8=

false

multipart.data

test.jpg

demo.jpg

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 78320852-7eee-b697-75e1-b6db0f4849e7

Date: Wed, 29 Feb 2012 12:26:16 GMT

Content-Length: 244

Content-Type: application/xml

Connection: close

Server: AliyunOSS

multipart.data

test.jpg

demo.jpg

请求示例II:

POST /?delete HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Wed, 29 Feb 2012 12:33:45 GMT

Content-Length:151

Content-MD5:fae2e404736a78a0067b62d80b1cc7d8

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:WuV0Jks8RyGSNQrBca64kEExJDs=

true

multipart.data

test.jpg

demo.jpg

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 501ad9bb-1383-771d-0ee9-59a810bd5fde

Date: Wed, 29 Feb 2012 12:33:45 GMT

Content-Length: 0

Connection: close

Server: AliyunOSS

相关阅读:

5.4.4Get Object

用于获取某个Object,此操作要求用户对该Object有读权限。

请求语法:

GET /ObjectNameHTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

Range: bytes=ByteRange(可选)

请求参数:

OSS支持用户在发送GET请求时,可以自定义OSS返回请求中的一些Header,这些Header包括:

名称

描述

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头

类型:字符串

默认值:无

请求Header:

名称

描述

Range

指定文件传输的范围。如,设定bytes=0-9,表示传送第0到第9这10个字符。

类型:字符串

默认值:无

If-Modified-Since

如果指定的时间早于实际修改时间,则正常传送文件,并返回200 OK;否则返回304

not modified

类型:字符串

默认值:无

If-Unmodified-Since

如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件,并返回200 OK;否则返回412

precondition failed错误

类型:字符串

默认值:无

If-Match

如果传入期望的ETag和object的ETag匹配,则正常传输文件,并返回200 OK;否则返回412

precondition failed错误

类型:字符串

默认值:无

If-None-Match

如果传入的ETag值和Object的ETag不匹配,则正常传输文件,并返回200 OK;否则返回304

Not Modified

类型:字符串

默认值:无

细节分析:

1)GetObject通过range参数可以支持断点续传,对于比较大的Object建议使用该功能。

2)如果在请求头中使用Range参数;则返回消息中会包含整个文件的长度和此次返回的范围,例如:Content-Range: bytes 0-9/44,表示整个文件长度为44,此次返回的范围为0-9。如果不符合范围规范,则传送整个文件,并且不在结果中提及Content-Range。

3)如果“If-Modified-Since”元素中设定的时间不符合规范,直接返回文件,并返回200 OK。

4)If-Modified-Since和If-Unmodified-Since可以同时存在,If-Match和If-None-Match也可以同时存在。

5)如果包含If-Unmodified-Since并且不符合或者包含If-Match并且不符合,返回412 precondition failed

6)如果包含If-Modified-Since并且不符合或者包含If-None-Match并且不符合,返回304 Not Modified

7)如果文件不存在返回404 Not Found错误。错误码:NoSuchKey。

8)OSS不支持在匿名访问的GET请求中,通过请求参数来自定义返回请求的header。

9)在自定义OSS返回请求中的一些Header时,只有请求处理成功(即返回码为200时),OSS才会将请求的header设置成用户GET请求参数中指定的值。

请求示例:

GET /oss.jpg HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 06:38:30 GMT

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:UNQDb7GapEgJCZkcde6OhZ9Jfe8=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 3a89276f-2e2d-7965-3ff9-51c875b99c41

Date: Fri, 24 Feb 2012 06:38:30 GMT

Last-Modified: Fri, 24 Feb 2012 06:07:48 GMT

ETag: "5B3C1A2E053D763E1B002CC607C5A0FE "

Content-Type: image/jpg

Content-Length: 344606

Server: AliyunOSS

[344606 bytes of object data]

Range请求示例:

GET //oss.jpg HTTP/1.1

Host:oss-example. oss.aliyuncs.com

Date: Fri, 28 Feb 2012 05:38:42 GMT

Range: bytes=100-900

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:qZzjF3DUtd+yK16BdhGtFcCVknM=

返回示例:

HTTP/1.1 206 Partial Content

x-oss-request-id: 28f6508f-15ea-8224-234e-c0ce40734b89

Date: Fri, 28 Feb 2012 05:38:42 GMT

Last-Modified: Fri, 24 Feb 2012 06:07:48 GMT

ETag: "5B3C1A2E053D763E1B002CC607C5A0FE "

Accept-Ranges: bytes

Content-Range: bytes 100-900/344606

Content-Type: image/jpg

Content-Length: 801

Server: AliyunOSS

[801 bytes of object data]

自定义返回消息头的请求示例(URL签名方式):

GET /oss.jpg?response-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%87

HTTP/1.1

Host: oss-example.oss.aliyuncs.com:

Date: Fri, 24 Feb 2012 06:09:48 GMT

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 1144d124-055c-4052-2c65-a1e3439d41c1

Date: Fri, 24 Feb 2012 06:09:48 GMT

Last-Modified: Fri, 24 Feb 2012 06:07:48 GMT

ETag: "5B3C1A2E053D763E1B002CC607C5A0FE "

Content-Length: 344606

Connection: close

Content-disposition: attachment; filename:testing.txt

Content-language:中文

Content-encoding: utf-8

Content-type: text

Cache-control: no-cache

Expires: Fri, 24 Feb 2012 17:00:00 GMT

Server: AliyunOSS

[344606 bytes of object data]

相关阅读:

Head

Object只返回某个Object的meta信息,不返回文件内容。

请求语法:

HEAD /ObjectNameHTTP/1.1

Host:BucketName/oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

请求Header:

名称

描述

If-Modified-Since

如果指定的时间早于实际修改时间,则返回200 OK和Object

Meta;否则返回304 not modified

类型:字符串

默认值:无

If-Unmodified-Since

如果传入参数中的时间等于或者晚于文件实际修改时间,则返回200 OK和Object

Meta;否则返回412 precondition failed错误

类型:字符串

默认值:无

If-Match

如果传入期望的ETag和object的ETag匹配,则返回200 OK和Object

Meta;否则返回412 precondition failed错误

类型:字符串

默认值:无

If-None-Match

如果传入的ETag值和Object的ETag不匹配,则返回200 OK和Object

Meta;否则返回304 Not Modified

类型:字符串

默认值:无

细节分析:

1)不论正常返回200 OK还是非正常返回,Head Object都不返回消息体。

2)HeadObject支持在头中设定If-Modified-Since, If-Unmodified-Since, If-Match,If-None-Match的查询条件。具体规则请参见GetObject中对应的选项。如果没有修改,返回304 Not Modified。

3)如果用户在PutObject的时候传入以x-oss-meta-为开头的user meta,比如x-oss-meta-location,返回消息时,返回这些user meta。

4)如果文件不存在返回404 Not Found错误。

请求示例:

HEAD /oss.jpg HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Fri, 24 Feb 2012 07:32:52 GMT

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:JbzF2LxZUtanlJ5dLA092wpDC/E=

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 06d4be30-2216-9264-757a-8f8b19b254bb

Date: Fri, 24 Feb 2012 07:32:52 GMT

Last-Modified: Fri, 24 Feb 2012 06:07:48 GMT

ETag: "fba9dede5f27731c9771645a39863328"

Content-Length: 344606

Content-Type: image/jpg

Connection: close

Server: AliyunOSS

相关阅读:

5.4.6Put Object

Put Object用于上传文件。

请求语法:

PUT /ObjectNameHTTP/1.1

Content-Length:ContentLength

Content-Type:ContentType

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Authorization:SignatureValue

请求Header:

名称

描述

Cache-Control

指定该Object被下载时的网页的缓存行为;更详细描述请参照RFC2616。

类型:字符串

默认值:无

Content-Disposition

指定该Object被下载时的名称;更详细描述请参照RFC2616。

类型:字符串

默认值:无

Content-Encoding

指定该Object被下载时的内容编码格式;更详细描述请参照RFC2616。

类型:字符串

默认值:无

Expires

过期时间(milliseconds);更详细描述请参照RFC2616。

类型:整数

默认值:无

细节分析:

1)Put Object请求处理成功后,OSS会将收到文件的MD5值放在返回给用户的请求头“ETag”中,以便用户检查OSS上的数据和要上传的数据内容一致。

2)如果请求头中的“Content-Length”值小于实际请求体(body)中传输的数据长度,OSS仍将成功创建文件;但Object大小只等于“Content-Length”中定义的大小,其他数据将被丢弃。

3)如果试图添加的Object的同名文件已经存在,并且有访问权限。新添加的文件将覆盖原来的文件,成功返回200 OK。

4)如果在PutObject的时候,携带以x-oss-meta-为前缀的参数,则视为user meta,比如x-oss-meta-location。一个Object可以有多个类似的参数,但所有的user meta总大小不能超过2k。

5)如果Head中没有加入Content length参数,会返回411 Length Required错误。错误码:MissingContentLength。

6)如果设定了长度,但是没有发送消息Body,或者发送的body大小小于给定大小,服务器会一直等待,直到time out,返回400 Bad Request消息。错误码:RequestTimeout。此时OSS上的这个文件内容是用户已经上传完的数据。

7)如果试图添加的Object所在的Bucket不存在,返回404 Not Found错误。错误码:NoSuchBucket。

8)如果试图添加的Object所在的Bucket没有访问权限,返回403 Forbidden错误。错误码:AccessDenied。

9)如果添加文件长度超过5G,返回错误消息400 Bad

Request。错误码:InvalidArgument。

10)如果传入的Object key长度大于1023,返回400 Bad Request。错误码:InvalidObjectName。

11)PUT一个Object的时候,OSS支持4个HTTP RFC 2616协议规定的Header字段:Cache-Control、Expires、Content-Encoding、Content-Disposition。如果上传Object时设置了这些Header,则这个Object被下载时,相应的Header值会被自动设置成上传时的值。

请求示例:

PUT /oss.jpg HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Cache-control:

no-cache

Expires: Fri, 28 Feb

2012 05:38:42 GMT

Content-Encoding:

utf-8

Content-Disposition: attachment;filename=oss_download.jpg

Date: Fri, 24 Feb

2012 06:03:28 GMT

Content-Type: image/jpg

Content-Length: 344606

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:kZoYNv66bsmc10+dcGKw5x2PRrk=

[344606 bytes of

object data]

返回示例:

HTTP/1.1 200 OK

x-oss-request-id: 61d2042d-1b68-6708-5906-33d81921362e

Date: Fri, 24 Feb 2012

06:03:28 GMT

ETag: 5B3C1A2E053D763E1B002CC607C5A0FE

Connection: close

Content-Length: 0

Server: AliyunOSS

相关阅读:

除了通过PUT Object接口上传文件到OSS以外,OSS还提供了另外一种上传模式——Multipart Upload。用户可以在如下的应用场景内(但不仅限于此),使用Multipart

Upload上传模式,如:

l需要支持断点上传。

l上传超过100MB大小的文件。

l网络条件较差,和OSS的服务器之间的链接经常断开。

l需要流式地上传文件。

l上传文件之前,无法确定上传文件的大小。

5.5.1Initiate Multipart Upload

使用Multipart Upload模式传输数据前,必须先调用该接口来通知OSS初始化一个Multipart

Upload事件。该接口会返回一个OSS服务器创建的全局唯一的Upload ID,用于标识本次Multipart Upload事件。用户可以根据这个ID来发起相关的操作,如中止Multipart Upload、查询Multipart Upload等。

请求语法:

POST /ObjectName?uploads

HTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT date

Authorization:SignatureValue

请求Header:

名称

描述

Cache-Control

指定该Object被下载时的网页的缓存行为;更详细描述请参照RFC2616。

类型:字符串

默认值:无

Content-Disposition

指定该Object被下载时的名称;更详细描述请参照RFC2616。

类型:字符串

默认值:无

Content-Encoding

指定该Object被下载时的内容编码格式;更详细描述请参照RFC2616。

类型:字符串

默认值:无

Expires

过期时间(milliseconds);更详细描述请参照RFC2616。

类型:整数

默认值:无

响应元素(Response Elements):

名称

描述

Bucket

初始化一个Multipart

Upload事件的Bucket名称。

类型:字符串

父节点:InitiateMultipartUploadResult

InitiateMultipartUploadResult

保存Initiate

Multipart Upload请求结果的容器。

类型:容器

子节点:Bucket,

Key, UploadId

父节点:None

Key

初始化一个Multipart

Upload事件的Object名称。

类型:字符串

父节点:InitiateMultipartUploadResult

UploadId

唯一标示此次Multipart

Upload事件的ID。

类型:字符串

父节点:InitiateMultipartUploadResult

细节分析:

1)该操作计算认证签名的时候,需要加“?uploads”到CanonicalizedResource中。

2)初始化Multipart Upload请求,支持如下标准的HTTP请求头:Cache-Control,Content- Disposition,Content-Encoding,Content-Type,Expires,以及以“x-oss-meta-”开头的用户自定义Headers。具体含义请参见PUT Object接口。

3)初始化Multipart Upload请求,并不会影响已经存在的同名object。

4)服务器收到初始化Multipart Upload请求后,会返回一个XML格式的请求体。该请求体内有三个元素:Bucket,Key和UploadID。请记录下其中的UploadID,以用于后续的Multipart相关操作。

请求示例:

POST /multipart.data?uploads

HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Wed, 22 Feb 2012

08:32:21 GMT

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:/cluRFtRwMTZpC2hTj4F67AGdM4=

返回示例:

HTTP/1.1 200 OK

Content-Length: 230

Server: AliyunOSS

Connection: close

x-oss-request-id:

42c25703-7503-fbd8-670a-bda01eaec618

Date: Wed, 22 Feb 2012

08:32:21 GMT

Content-Type:

application/xml

version="1.0" encoding="UTF-8"?>

xmlns=”http://doc.oss.aliyuncs.com”>

multipart_upload

multipart.data

0004B9894A22E5B1888A1E29F8236E2D

相关阅读:

在初始化一个Multipart Upload之后,可以根据指定的Object名和Upload ID来分块(Part)上传数据。每一个上传的Part都有一个标识它的号码(part number,范围是1~10,000)。对于同一个Upload ID,该号码不但唯一标识这一块数据,也标识了这块数据在整个文件内的相对位置。如果你用同一个part号码,上传了新的数据,那么OSS上已有的这个号码的Part数据将被覆盖。除了最后一块Part以外,其他的part最小为5MB;最后一块Part没有大小限制。

请求语法:

PUT /ObjectName? partNumber=PartNumber&uploadid=UploadIdHTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMT Date

Content-Length:Size

Authorization:SignatureValue

细节分析:

1)调用该接口上传Part数据前,必须调用Initiate

Multipart Upload接口,获取一个OSS服务器颁发的Upload ID。

2)Multipart Upload要求除最后一个Part以外,其他的Part大小都要大于5MB。但是Upload

Part接口并不会立即校验上传Part的大小(因为不知道是否为最后一块);只有当Complete Multipart Upload的时候才会校验。

3)OSS会将服务器端收到Part数据的MD5值放在ETag头内返回给用户。为了保证数据在网络传输过程中不出现错误,强烈推荐用户在收到OSS的返回请求后,用该MD5值验证上传数据的正确性。

4)Part号码的范围是1~10000。如果超出这个范围,OSS将返回InvalidArgument的错误码。

请求示例:

PUT /multipart.data?partNumber=1&uploadId=0004B9895DBBB6EC98E36

HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Content-Length:6291456

Date: Wed, 22 Feb 2012

08:32:21 GMT

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:J/lICfXEvPmmSW86bBAfMmUmWjI=

[6291456 bytes data]

返回示例:

HTTP/1.1 200 OK

Server: AliyunOSS

Connection: close

ETag: 7265F4D211B56873A381D321F586E4A9

x-oss-request-id: 3e6aba62-1eae-d246-6118-8ff42cd0c21a

Date: Wed, 22 Feb 2012

08:32:21 GMT

相关阅读:

5.5.3Complete Multipart Upload

在将所有数据Part都上传完成后,必须调用Complete

Multipart Upload API来完成整个文件的Multipart Upload。在执行该操作时,用户必须提供所有有效的数据Part的列表(包括part号码和ETAG);OSS收到用户提交的Part列表后,会逐一验证每个数据Part的有效性。当所有的数据Part验证通过后,OSS将把这些数据part组合成一个完整的Object。

请求语法:

POST /ObjectName?uploadId=UploadIdHTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMTDate

Content-Length:Size

Authorization:Signature

PartNumber

ETag

...

请求元素(Request Elements):

名称

描述

CompleteMultipartUpload

保存Complete

Multipart Upload请求内容的容器。

类型:容器

子节点:一个或多个Part元素

父节点:无

ETag

Part成功上传后,OSS返回的ETag值。

类型:字符串

父节点:Part

Part

保存已经上传Part信息的容器。

类型:容器

子节点:ETag, PartNumber

父节点:InitiateMultipartUploadResult

PartNumber

Part数目。

类型:整数

父节点:Part

响应元素(Response Elements):

名称

描述

Bucket

Bucket名称。

类型:字符串

父节点:CompleteMultipartUploadResult

CompleteMultipartUploadResult

保存Complete

Multipart Upload请求结果的容器。

类型:容器

子节点:Bucket, Key, ETag, Location

父节点:None

ETag

ETag

(entity tag)在每个Object生成的时候被创建,用于标示一个Object的内容。Complete

Multipart Upload请求创建的Object,ETag值是其内容的UUID。ETag值可以用于检查Object内容是否发生变化。.

类型:字符串

父节点:CompleteMultipartUploadResult

Location

新创建Object的URL。

类型:字符串

父节点:CompleteMultipartUploadResult

Key

新创建Object的名字。

类型:字符串

父节点:CompleteMultipartUploadResult

细节分析:

1)Complete Multipart Upload时,会确认除最后一块以外所有块的大小都大于5MB,并检查用户提交的Partlist中的每一个Part号码和Etag。所以在上传Part时,客户端除了需要记录Part号码外,还需要记录每次上传Part成功后,服务器返回的ETag值。

2)OSS处理Complete Multipart Upload请求时,会持续一定的时间。在这段时间内,如果客户端和OSS之间的链接断掉,OSS仍会继续将请求做完。

3)用户提交的Part List中,Part号码可以是不连续的。例如第一块的Part号码是1;第二块的Part号码是5。

4)OSS处理Complete Multipart Upload请求成功后,该Upload ID就会变成无效。

5)同一个Object可以同时拥有不同的Upload Id,当Complete一个Upload ID后,该Object的其他Upload ID不受影响。

请求示例:

POST /multipart.data? uploadId=0004B9B2D2F7815C432C9057C03134D4

HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Content-Length: 1056

Date: Fri, 24 Feb 2012

10:19:18 GMT

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:8VwFhFUWmVecK6jQlHlXMK/zMT0=

1

"3349DC700140D7F86A078484278075A9"

5

"8EFDA8BE206636A695359836FE0A0E0A"

8

"8C315065167132444177411FDA149B92"

返回示例:

HTTP/1.1 200 OK

Server: AliyunOSS

Content-Length: 329

Content-Type:

Application/xml

Connection: close

x-oss-request-id: 594f0751-3b1e-168f-4501-4ac71d217d6e

Date: Fri, 24 Feb 2012

10:19:18 GMT

version="1.0" encoding="UTF-8"?>

xmlns=”http://doc.oss.aliyuncs.com”>

http://storage.aliyun-inc.com/multipart_upload/multipart.data

multipart_upload

multipart.data

"B864DB6A936D376F9F8D3ED3BBE540DD-3"

相关阅读:

5.5.4Abort Multipart Upload

该接口可以根据用户提供的Upload ID中止其对应的Multipart Upload事件。当一个Multipart Upload事件被中止后,就不能再使用这个Upload ID做任何操作,已经上传的Part数据也会被删除。

请求语法:

DELETE/ObjectName?uploadId=UploadIdHTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMTDate

Authorization:Signature

细节分析:

1)中止一个Multipart Upload事件时,如果其所属的某些Part仍然在上传,那么这次中止操作将无法删除这些Part。所以如果存在并发访问的情况,为了彻底释放OSS上的空间,需要调用几次Abort Multipart Upload接口。

2)如果输入的Upload Id不存在,OSS会返回404错误,错误码为:NoSuchUpload。

请求示例:

Delete /multipart.data?partNumber=1&uploadId=0004B9895DBBB6EC98E

HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Wed, 22 Feb 2012

08:32:21 GMT

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:J/lICfXEvPmmSW86bBAfMmUmWjI=

返回示例:

HTTP/1.1 204

Server: AliyunOSS

Connection: close

x-oss-request-id: 059a22ba-6ba9-daed-5f3a-e48027df344d

Date: Wed, 22 Feb 2012

08:32:21 GMT

相关阅读:

5.5.5List Multipart Uploads

List Multipart Uploads可以罗列出所有执行中的Multipart Upload事件,即已经被初始化的Multipart Upload但是未被Complete或者Abort的MultipartUpload事件。OSS返回的罗列结果中最多会包含1000个Multipart Upload信息。如果想指定OSS返回罗列结果内Multipart Upload信息的数目,可以在请求中添加max-uploads参数。另外,OSS返回罗列结果中的IsTruncated元素标明是否还有其他的Multipart Upload。

请求语法:

Get /?uploadsHTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMTDate

Authorization:Signature

请求参数:

名称

描述

delimiter

是一个用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素——CommonPrefixes。

类型:字符串

max-uploads

限定此次返回Multipart

Uploads事件的最大数目,如果不设定,默认为1000,max-keys取值不能大于1000。

类型:字符串

key-marker

与upload-id-marker参数一同使用来指定返回结果的起始位置。

l如果upload-id-marker参数未设置,查询结果中包含:所有Object名字的字典序大于key-marker参数值的Multipart事件。

l如果upload-id-marker参数被设置,查询结果中包含:所有Object名字的字典序大于key-marker参数值的Multipart事件和Object名字等于key-marker参数值,但是Upload

ID比upload-id-marker参数值大的Multipart

Uploads事件。

类型:字符串

prefix

限定返回的object

key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix。

类型:字符串

upload-id-marker

与key-marker参数一同使用来指定返回结果的起始位置。

l如果key-marker参数未设置,则OSS忽略upload-id-marker参数。

l如果key-marker参数被设置,查询结果中包含:所有Object名字的字典序大于key-marker参数值的Multipart事件和Object名字等于key-marker参数值,但是Upload

ID比upload-id-marker参数值大的Multipart

Uploads事件。

类型:字符串

响应元素(Response Elements):

名称

描述

ListMultipartUploadsResult

保存List

Multipart Upload请求结果的容器。

类型:容器

子节点:Bucket, KeyMarker, UploadIdMarker, NextKeyMarker,

NextUploadIdMarker, MasUploads, Delimiter, Prefix, CommonPrefixes,

IsTruncated, Upload

父节点:None

Bucket

Bucket名称。

类型:字符串

父节点:ListMultipartUploadsResult

KeyMarker

列表的起始Object位置。

类型:字符串

父节点:ListMultipartUploadsResult

UploadIdMarker

列表的起始UploadID位置。

类型:字符串

父节点:ListMultipartUploadsResult

NextKeyMarker

如果本次没有返回全部结果,响应请求中将包含NextKeyMarker元素,用于标明接下来请求的KeyMarker值。

类型:字符串

父节点:ListMultipartUploadsResult

NextUploadMarker

如果本次没有返回全部结果,响应请求中将包含NextUploadMarker元素,用于标明接下来请求的UploadMarker值。

类型:字符串

父节点:ListMultipartUploadsResult

MaxUploads

返回的最大Upload数目。

类型:整数

父节点:ListMultipartUploadsResult

IsTruncated

标明是否本次返回的Multipart

Upload结果列表被截断。“true”表示本次没有返回全部结果;“false”表示本次已经返回了全部结果。

类型:枚举字符串

有效值:false

| true

默认值:false

父节点:ListMultipartUploadsResult

Upload

保存Multipart

Upload事件信息的容器。

类型:容器

子节点:Key, UploadId, Initiated

父节点:ListMultipartUploadsResult

Key

初始化Multipart

Upload事件的Object名字。

类型:字符串

父节点:Upload

UploadId

Multipart

Upload事件的ID。

类型:字符串

父节点:Upload

Initiated

Multipart

Upload事件初始化的时间.

类型:日期

父节点:Upload

细节分析:

1)“max-uploads”参数最大值为1000。

2)在OSS的返回结果首先按照Object名字字典序升序排列;对于同一个Object,则按照时间序,升序排列。

3)可以灵活地使用prefix参数对bucket内的object进行分组管理(类似与文件夹的功能)。

4)List Multipart Uploads请求支持5种请求参数:prefix,marker,delimiter,upload-id-marker和max-keys。通过这些参数的组合,可以设定查询Multipart Uploads事件的规则,获得期望的查询结果。

请求示例:

Get /?uploads HTTP/1.1

Host:oss-example. oss.aliyuncs.com

Date: Thu, 23 Feb 2012

06:14:27 GMT

Authorization: OSS

qn6qrrqxo2oawuk53otfjbyc:JX75CtQqsmBBz+dcivn7kwBMvOY=

返回示例:

HTTP/1.1 200

Server: AliyunOSS

Connection: close

Content-length: 1839

Content-type: application/xml

x-oss-request-id: 58a41847-3d93-1905-20db-ba6f561ce67a

Date: Thu, 23 Feb 2012

06:14:27 GMT

version="1.0" encoding="UTF-8"?>

xmlns=”http://doc.oss.aliyuncs.com”>

oss-example

oss.avi

0004B99B8E707874FC2D692FA5D77D3F

1000

false

multipart.data

0004B999EF518A1FE585B0C9360DC4C8

2012-02-23T04:18:23.000Z

multipart.data

0004B999EF5A239BB9138C6227D69F95

2012-02-23T04:18:23.000Z

oss.avi

0004B99B8E707874FC2D692FA5D77D3F

2012-02-23T06:14:27.000Z

相关阅读:

5.5.6List Parts

List Parts命令可以罗列出指定Upload ID所属的所有已经上传成功Part。

请求语法:

Get/ObjectName?uploadId=UploadIdHTTP/1.1

Host:BucketName.oss.aliyuncs.com

Date:GMTDate

Authorization:Signature

请求参数(Request Parameters):

名称

描述

uploadId

Multipart

Upload事件的ID。

类型:字符串

默认值:无

max-parts

规定在OSS响应中的最大Part数目。

类型:整数

默认值:1,000

part-number-marker

指定List的起始位置,只有Part

Number数目大于该参数的Part会被列出。

类型:整数

默认值:无

名称

描述

uploadId

Upload

ID identifying the multipart upload whose parts are being listed.

Type:

String

Default:

None

max-parts

Sets

the maximum number of parts to return in the response body.

Type:

Integer

Default:

1,000

part-number-marker

Specifies

the part after which listing should begin. Only parts with higher part

numbers will be listed.

Type:

Integer

Default:

None

响应元素(Response Elements):

名称

描述

ListPartsResult

保存List

Part请求结果的容器。

类型:容器

子节点:Bucket, Key, UploadId, PartNumberMarker, NextPartNumberMarker,

MaxParts, IsTruncated, Part

父节点:无

Bucket

Bucket名称。

类型:字符串

父节点:ListPartsResult

Key

Object名称。

类型:字符串

父节点:ListPartsResult

UploadId

Upload事件ID。

类型:字符串

父节点:ListPartsResult

PartNumberMarker

本次List结果的Part

Number起始位置。

类型:整数

父节点:ListPartsResult

NextPartNumberMarker

如果本次没有返回全部结果,响应请求中将包含NextPartNumberMarker元素,用于标明接下来请求的PartNumberMarker值。.

类型:整数

父节点:ListPartsResult

MaxParts

返回请求中最大的Part数目。

类型:整数

父节点:ListPartsResult

IsTruncated

标明是否本次返回的List

Part结果列表被截断。“true”表示本次没有返回全部结果;“false”表示本次已经返回了全部结果。

类型:枚举字符串

有效值:true |

false

父节点:ListPartsResult

Part

保存Part信息的容器。

类型:字符串

子节点:PartNumber,

LastModified, ETag, Size

父节点:ListPartsResult

PartNumber

标示Part的数字。

类型:整数

父节点:ListPartsResult.Part

LastModified

Part上传的时间。

类型:日期

父节点:ListPartsResult.part

ETag

已上传Part内容的ETag。

类型:字符串

父节点:ListPartsResult.Part

Size

已上传Part大小。

类型:整数

父节点:ListPartsResult.Part

细节分析:

1)List Parts支持max-parts和part-number-marker两种请求参数。

2)max-parts参数最大值为1000;默认值也为1000。

3)在OSS的返回结果按照Part号码升序排列。

4)由于网络传输可能出错,所以不推荐用List Part出来的结果(Part Number和ETag值)来生成最后Complete Multipart的Part列表。

请求示例:

Get /multipart.data?uploadId=0004B999EF5A239BB9138C6227D69F95 HTTP/1.1

Host: oss-example.oss.aliyuncs.com

Date: Thu, 23 Feb 2012 07:13:28 GMT

Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:4qOnUMc9UQWqkz8wDqD3lIsa9P8=

返回示例:

HTTP/1.1 200

Server: AliyunOSS

Connection: close

Content-length: 1221

Content-type: application/xml

x-oss-request-id: 106452c8-10ff-812d-736e-c865294afc1c

Date: Thu, 23 Feb 2012 07:13:28 GMT

multipart_upload

multipart.data

0004B999EF5A239BB9138C6227D69F95

5

1000

false

1

2012-02-23T07:01:34.000Z

"3349DC700140D7F86A078484278075A9"

6291456

2

2012-02-23T07:01:12.000Z

"3349DC700140D7F86A078484278075A9"

6291456

5

2012-02-23T07:02:03.000Z

"7265F4D211B56873A381D321F586E4A9"

1024

相关阅读:

当用户访问OSS出现错误时,OSS会返回给用户相应的错误码和错误信息,便于用户定位问题,并做出适当的处理。

6.1.的错误响应格式

当用户访问OSS出错时,OSS会返回给用户一个合适的3xx,4xx或者5xx的HTTP状态码;以及一个application/xml格式的消息体。

错误响应的消息体例子:

version="1.0" ?>

AccessDenied

Query-string

authentication requires the Signature, Expires and OSSAccessKeyId parameters

1D842BC5425544BB

oss.aliyuncs.com

所有错误的消息体中都包括以下几个元素:

nCode:OSS返回给用户的错误码。

nMessage:OSS给出的详细错误信息。

nRequestId:用于唯一标识该次请求的UUID;当你无法解决问题时,可以凭这个RequestId来请求OSS开发工程师的帮助。

nHostId:用于标识访问的OSS集群(目前统一为oss.aliyuncs.com)

其他特殊的错误信息元素请参照每个请求的具体介绍。

6.2.的错误码

OSS的错误码列表如下:

错误码

描述

HTTP状态码

AccessDenied

拒绝访问

403

BucketAlreadyExists

Bucket已经存在

409

BucketNotEmpty

Bucket不为空

409

EntityTooLarge

实体过大

400

EntityTooSmall

实体过小

400

FileGroupTooLarge

文件组过大

400

FilePartNotExist

文件Part不存在

400

FilePartStale

文件Part过时

400

InvalidArgument

参数格式错误

400

InvalidAccessKeyId

Access Key ID不存在

403

InvalidBucketName

无效的Bucket名字

400

InvalidDigest

无效的摘要

400

InvalidObjectName

无效的Object名字

400

InvalidPart

无效的Part

400

InvalidPartOrder

无效的part顺序

400

InvalidTargetBucketForLogging

Logging操作中有无效的目标bucket

400

InternalError

OSS内部发生错误

500

MalformedXML

XML格式非法

400

MethodNotAllowed

不支持的方法

405

MissingArgument

缺少参数

411

MissingContentLength

缺少内容长度

411

NoSuchBucket

Bucket不存在

404

NoSuchKey

文件不存在

404

NoSuchUpload

Multipart Upload ID不存在

404

NotImplemented

无法处理的方法

501

PreconditionFailed

预处理错误

412

RequestTimeTooSkewed

发起请求的时间和服务器时间超出15分钟

403

RequestTimeout

请求超时

400

SignatureDoesNotMatch

签名错误

403

TooManyBuckets

用户的Bucket数目超过限制

400

6.3.不支持分块传输编码

HTTP协议有一种分块传输编码的机制(Chunked Transfer Encoding),即一个HTTP消息可以分成多个部分进行传输。它对HTTP请求和HTTP响应都是适用的。出于安全的考虑,OSS不支持这种分块传输编码方式。如果OSS收到这种分块传输编码方式的请求,回直接返回HTTP错误码:411。该错误码在HTTP协议中的含义是:“The request must be chunked

or have a content length”。

6.4.不支持的操作

如果试图以OSS不支持的操作来访问某个资源,返回405 Method Not Allowed错误。

错误请求示例:

abc / HTTP/1.1

Host:oss-example. oss.aliyuncs.com

Date: date

Authorization:

signatureValue

返回示例:

x-oss-request-id:

2403382433A2EDA8

Allow: GET, DELETE,

HEAD, PUT

Content-Type:

application/xml

Transfer-Encoding:

chunked

Date: Thu, 31 Mar 2011

10:01:52 GMT

Server: AliyunOSS

version="1.0" ?>

MethodNotAllowed

The

specified method is not allowed against this resource.

BUCKET

abc

2403382433A2EDA8

oss.aliyuncs.com

注意:如果访问的资源是/bucket/,ResourceType应该是bucket,如果访问的资源是/bucket/object,ResourceType应该是object。

6.5.操作支持但参数不支持的操作

如果在OSS合法的操作中,添加了OSS不支持的参数(例如在PUT的时候,加入If-Modified-Since参数),OSS会返回501 Not Implemented错误

错误请求示例:

PUT /my-image.jpg

HTTP/1.1

Host:oss-example. oss.aliyuncs.com

Date: Wed, 28 May 2011

22:32:00 GMT

If-Modified-Since: Wed,

06 Apr 2011 10:02:46 GMT

返回示例:

501 Not Implemented

x-oss-request-id:

77E534EBF90372BE

Content-Type:

application/xml

Transfer-Encoding:

chunked

Date: Thu, 28 Apr 2011

08:03:07 GMT

Connection: close

Server: AliyunOSS

version="1.0" ?>

NotImplemented

A

header you provided implies functionality that is not implemented.

If-Modified-Since

77E534EBF90372BE

oss.aliyuncs.com

oss上传判断_OSS相关推荐

  1. java使用阿里云oss上传文件测试案例+上传策略包装类

    产品文档地址: https://help.aliyun.com/product/31815.html 产品购买地址: https://www.aliyun.com/search?scene=all&a ...

  2. SpringBoot整合阿里云OSS上传文件

    一.需求分析 文件上传是一个非常常见的功能,就是通过IO流将文件写到另外一个地方,这个地方可以是项目下的某个文件夹里,或者是本地电脑某个盘下面,还可以是云服务OSS里面,这里就是我要讲到的OSS,我写 ...

  3. OSS 上传出现异常

    案例一: OSSBrower "no space left on" 分析: 有明显报错信息的先 Google 一下,看看是操作系统错误还是 OSSBrower 抛出,经过鉴定错误是 ...

  4. springboot集成阿里OSS上传文件

    开发前的准备: 自己在阿里云上申请免费的Oss对象存储,新建Bucket---读写权限选择公共读,我开始这里忘了导致后来踩了小坑 接下来是代码中的一些配置:我用的是springboot 1>添加 ...

  5. springboot整合阿里云oss上传的方法示例

    这篇文章主要介绍了springboot整合阿里云oss上传的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 OSS申请和 ...

  6. spring boot 整合 阿里云oss上传

    Spring Boot 整合 阿里云OSS上传 OSS申请和配置 1. 注册登录 2.开通以及配置 springboot整合使用 1. 进入我们springboot的项目中,导入oss相关依赖 2. ...

  7. 阿里云OSS上传文件并返回文件地址

    目录 依赖添加 实体类: OSS配置类: OSSUtil工具类: OSS上传接口类: OSS上传接口实现类: OSS上传控制类: 工具类: 依赖添加 在Maven的pom.xml文件中添加OSS的依赖 ...

  8. 文件服务器异常 选择签名,OSS上传文件后,服务器签名验证失败

    关于 OSS上传文件后,服务器签名验证失败的搜索结果 回答 指定该Header后,在响应头中也会返回该Header,OSS会对上传的Object进行加密编码存储,当这个Object被下载时,响应头中会 ...

  9. Springboot集成 阿里云OSS上传及下载

    文章目录 使用手册 maven依赖及环境配置 定义配置bean及OSS工具类 定义UploadController和DownloadController 下载接口优化为返回重定向oss路径 遇到的问题 ...

最新文章

  1. “===” 也有不靠谱的时候
  2. dpkg: 处理软件包 update-notifier-common (--configure)时出错:
  3. 让经纬度数据带矢量方向_惊艳!这样处理可得到细至可用于交通模型的路网数据...
  4. UVA1262Password(第K字典序)
  5. 有关VS2008制作安装包时遇到的问题详解
  6. 聚类(5)-- Spectral clustering
  7. Android Studio 下载 与 安装 详细步骤
  8. CodeForces 522D Closest Equals 树状数组
  9. 分组码--原理,码率,软硬判决,编码增益
  10. linux网络适配器驱动程序怎么安装,如何安装网卡驱动_如何重新安装网卡驱动
  11. Metasploit扫描漏洞模块
  12. 【三】多线程 —— 设计模式
  13. Windows性能监控perfmon工具的使用和性能指标的分析
  14. 计算机休眠会断电吗,电脑「睡眠」和「休眠」原来有这么大区别,下次别用错了。...
  15. Zalando在疫情中成为赢家,甚至超越了亚马逊
  16. 机器学习笔记--神经网络--Rosenblatt
  17. CAN总线学习:MM32
  18. python群聊聊天室程序_Python聊天室程序---基础
  19. 黑马手机卫士黑名单电话拦截 使用ITelephony.aidl和NeighboringCellInfo.aidl 自动拦截黑名单电话 附文件
  20. 商圈调查方案-调研目标

热门文章

  1. 推理集 —— death
  2. 整数区间内整数的因子的个数
  3. Python Flask Web 第六课 —— 静态文件
  4. 强悍的 ubuntu —— ubuntu 与 windows 双系统的交互
  5. CentOS + PyCharm 环境下使用 LIBSVM(及 unresolved reference 问题的解决)
  6. 极简代码(一) —— class label 的统计计数
  7. C++ 对象模型(二)
  8. python自学-Python 应该怎么学?
  9. python电脑下载安装-Python的下载安装与Python编辑器的安装
  10. python和java哪个好学-Java和Python去学哪个好