开放接口规范
开发者在发送请求给 OSS 时,既可以使用 带签名认证的请求,也可以使用匿名访问。OSS提供的相关API接口如下:
关于Service操作
| API | 描述 |
|---|---|
| getService (listBuckets) | 返回请求者拥有的所有Bucket |
关于Bucket的操作
| API | 描述 |
|---|---|
| createBucket | 创建Bucket |
| putBucketACL | 设置Bucket访问权限 |
| putBucketLogging | 开启Bucket日志 |
| putBucketWebsite | 设置Bucket为静态网站托管模式 |
| putBucketReferer | 设置Bucket的防盗链规则 |
| putBucketLifecycle | 设置Bucket中Object的生命周期规则 |
| getBucket(ListObject) | 列出Bucket中所有Object的信息 |
| getBucketAcl | 获得Bucket访问权限 |
| getBucketLocation | 获得Bucket所属的数据中心位置信息 |
| getBucketInfo | 获取Bucket信息 |
| getBucketLogging | 查看Bucket的访问日志配置情况 |
| getBucketWebsite | 查看Bucket的静态网站托管状态 |
| getBucketReferer | 查看Bucket的防盗链规则 |
| getBucketLifecycle | 查看Bucket中Object的生命周期规则 |
| deleteBucket | 删除Bucket |
| deleteBucketLogging | 关闭Bucket访问日志记录功能 |
| deleteBucketWebsite | 关闭Bucket的静态网站托管模式 |
| deleteBucketLifecycle | 删除Bucket中Object的生命周期规则 |
| putBucketEncryption | 配置Bucket的加密规则 |
| getBucketEncryption | 获取Bucket的加密规则 |
| deleteBucketEncryption | 删除Bucket的加密规则 |
关于Object的操作
| API | 描述 |
|---|---|
| putObject | 上传Object |
| copyObject | 拷贝一个Object成另外一个Object |
| getObject | 获取Object |
| appendObject | 在Object尾追加上传数据 |
| deleteObject | 删除Object |
| deleteMultipleObjects | 删除多个Object |
| headObject | 只返回某个Object的meta信息,不返回文件内容 |
| getObjectMeta | 返回Object的基本meta信息,包括该Object的ETag、Size(文件大小)、LastModified,不返回文件内容 |
| postObject | 使用Post上传Object |
| putObjectACL | 设置ObjectACL |
| getObjectACL | 获取ObjectACL信息 |
| callback | 上传回调 |
| putSymlink | 创建软链接 |
| getSymlink | 获取软链接 |
| restoreObject | 解冻文件 |
| selectObject | 用SQL语法查询Object内容 |
| putObjectTagging | 设置或更新对象标签 |
| getObjectTagging | 获取对象标签信息 |
| deleteObjectTagging | 删除指定的对象标签 |
关于Multipart Upload的操作
| API | 描述 |
|---|---|
| InitiateMultipartUpload | 初始化MultipartUpload事件 |
| uploadPart | 分块上传文件 |
| uploadPartCopy | 分块复制上传文件 |
| completeMultipartUpload | 完成整个文件的MultipartUpload上传 |
| abortMultipartUpload | 取消MultipartUpload事件 |
| listMultipartUploads | 罗列出所有执行中的MultipartUpload事件 |
| listParts | 罗列出指定UploadID所属的所有已经上传成功Part |
跨域资源共享(CORS)
| API | 描述 |
|---|---|
| putBucketcors | 在指定Bucket设定一个CORS的规则 |
| getBucketcors | 获取指定的Bucket目前的CORS规则 |
| deleteBucketcors | 关闭指定Bucket对应的CORS功能并清空所有规则 |
| optionObject | 跨域访问preflight请求 |
关于Live Channel的操作
| API | 描述 |
|---|---|
| putLiveChannelStatus | 切换LiveChannel的状态 |
| putLiveChannel | 创建LiveChannel |
| getVodPlaylist | 获取播放列表 |
| postVodPlaylist | 生成播放列表 |
| get LiveChannelStat | 获取LiveChannel的推流状态信息 |
| getLiveChannelInfo | 获取LiveChannel的配置信息 |
| getLiveChannelHistory | 获取LiveChannel的推流记录 |
| listLiveChannel | 列举LiveChannel |
| deleteLiveChannel | 删除LiveChannel |
案例剖析
从上面的请求中 挑选任意接口分析
createBucket 创建Bucket
putObject 上传Object
getObject 下载Object
OSS云存储错误响应
当用户访问OSS出现错误时,OSS会返回给用户相应的错误码和错误信息,便于用户定位问题,并做出适当的处理。
OSS的错误响应格式
当用户访问OSS出错时,OSS会返回给用户一个合适的3xx,4xx或者5xx的HTTP状态码;以及一个application/xml格式的消息体。
错误响应的消息体例子:
<?xml version="1.0" ?>
<Error xmlns=”http://doc.oss.aliyuncs.com”>
<Code>
AccessDenied
</Code>
<Message>
Query-string authentication requires the Signature, Expires and OSSAccessKeyId parameters
</Message>
<RequestId>
1D842BC5425544BB
</RequestId>
<HostId>
oss.aliyuncs.com
</HostId>
</Error>
所有错误的消息体中都包括以下几个元素:
- Code:OSS返回给用户的错误码。
- Message:OSS给出的详细错误信息。
- RequestId:用于唯一标识该次请求的UUID;当你无法解决问题时,可以凭这个RequestId来请求OSS开发工程师的帮助。
- HostId:用于标识访问的OSS集群(目前统一为oss.aliyuncs.com)
OSS的错误码
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 |
请求一个需要Referer字段的Object
https://test000000000000001.oss-cn-beijing.aliyuncs.com/1.png
OSS参数不支持的操作
如果在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
<?xml version="1.0" ?>
<Error xmlns=”http://doc.oss.aliyuncs.com”>
<Code>
NotImplemented
</Code>
<Message>
A header you provided implies functionality that is not implemented.
</Message>
<Header>
If-Modified-Since
</Header>
<RequestId>
77E534EBF90372BE
</RequestId>
<HostId>
oss.aliyuncs.com
</HostId>
</Error>
OSS不支持的操作
如果试图以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
<?xml version="1.0" ?>
<Error xmlns=”http://doc.oss.aliyuncs.com”>
<Code>
MethodNotAllowed
</Code>
<Message>
The specified method is not allowed against this resource.
</Message>
<ResourceType>
BUCKET
</ResourceType>
<Method>
abc
</Method>
<RequestId>
2403382433A2EDA8
</RequestId>
<HostId>
oss.aliyuncs.com
</HostId>
</Error>