开发者在发送请求给 OSS 时,既可以使用 带签名认证的请求,也可以使用匿名访问。OSS提供的相关API接口如下:
关于Service操作
| API | 描述 |
| getService (listBuckets) | 返回请求者拥有的所有Bucket |
关于Bucket的操作
| API | 描述 |
| putBucket | 创建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功能并清空所有规则 |
| options | 跨域访问preflight请求 |
关于Live Channel的操作
| API | 描述 |
| putLiveChannelStatus | 切换LiveChannel的状态 |
| putLiveChannel | 创建LiveChannel |
| getVodPlaylist | 获取播放列表 |
| postVodPlaylist | 生成播放列表 |
| getLiveChannelStat | 获取LiveChannel的推流状态信息 |
| getLiveChannelInfo | 获取LiveChannel的配置信息 |
| getLiveChannelHistory | 获取LiveChannel的推流记录 |
| listLiveChannel | 列举LiveChannel |
| deleteLiveChannel | 删除LiveChannel |
当用户访问OSS出现错误时,OSS会返回给用户相应的错误码和错误信息,便于用户定位问题,并做出适当的处理。
(1)OSS的错误响应格式
当用户访问OSS出错时,OSS会返回给用户一个合适的3xx,4xx或者5xx的HTTP状态码;以及一个application/xml格式的消息体。
错误响应的消息体例子:
- "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>
所有错误的消息体中都包括以下几个元素:
(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 |
如果在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
-
-
- "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>
其他错误类似,这里只是介绍了一个示例。我们要学会观看响应体,并寻找错误源头,定位错误。