OpenAPI文档
  • 基础、平台产品
  • CDN
  • Kafka
  • Memcached
  • MongoDB
  • MySQL
  • Redis
  • 对象存储
  • 对象存储(v1.1)
    • API概览
      • 访问地址
    • 实例
      • DescribeRegions
      • DescribeProjects
      • DescribeBuckets
      • PutBucket
      • PutBucketTags
      • GetBucketInfo
      • GetBucketStat
      • GetBucketTags
      • DeleteBucket
      • DeleteBucketTags
      • UplodObject
      • UploadText
      • MultipartUpload
      • UploadPart
      • CompleteMultipartUpload
      • PutObjectTags
      • DeleteObject
      • DeletePrefixObjects
      • DeleteMultipleObjects
      • DescribeSTS
      • GetObject
      • GeneratePresignedurl
      • ListObjects
      • HeadObject
      • GetObjectTags
  • 负载均衡
  • 新版MongoDB
  • Vira
  • Vira2
  • OpenAPI
  • 对象存储(v1.1)

对象存储(v1.1)

# 对象存储公开API目录

# API概览

OSS产品提供以下相关API接口

API 描述
DescribeRegions 查询所有对象存储节点信息。
DescribeProjects 查询当前所有者的项目管理信息。
DescribeBuckets 查询请求所有者的所有存储空间(Bucket)的相关信息
PutBucket 创建存储空间(Bucket)。
PutBucketTags 添加或修改存储空间(Bucket)的标签
GetBucketStat 查询存储空间(Bucket)的相关信息。
GetBucketInfo 查询存储空间(Bucket)的存储容量以及文件对象(Object)信息
GetBucketTags 获取指定存储空间(Bucket)标签信息。
DeleteBucket 删除指定存储空间(Bucket)
DeleteBucketTags 删除指定存储空间(Bucket)的标签信息
UplodObject 上传对象(Object)
UploadText 上传字符串以文本对象存储到对象存储
MultipartUpload 初始化,获得Upload ID(大文件上传步骤1)。
UploadPart 上传分片(大文件上传步骤2)。
CompleteMultipartUpload 完成上传(大文件上传步骤3)。
PutObjectTags 更新对象对象(Object)标签信息
DeleteObject 删除对象(Object)。
DeletePrefixObjects 按前缀模糊删除对象(Object)。
DeleteMultipleObjects 批量删除对象(Object)。
DeleteObjectTags 删除对象(Object)标签。
DescribeSTS 获取用户临时上传签名(用于前端表单直接上传到对象存储)。
GetObject 下载对象(以返回url地址方式进行下载)。
ListObjects 查询存储空间下的对象信息(Object)。
GeneratePresignedurl 获取对象下载的url地址(私有存储空间可以获取带签名的url地址)。
HeadObject 查询对象的headers信息。
GetObjectTags 查询对象标签。
  • 认证方式
    • 1.公共请求参数
    • 2.签名机制
      • 步骤一:构造规范化请求字符串
      • 步骤二:构造签名字符串
    • 3.获取签名代码
  • 访问地址

# 访问地址

地区 访问地址
所有节点 gic-ossapi.capitalonline.net

# 实例

# DescribeRegions

Action: DescribeRegions

描述: 查询首云对象存储的节点信息。

请求方法: GET

注意事项:

  • 使用DescribeRegions接口时,有如下注意事项:

    • 无

参数:

  • 请求元素
名称 类型 是否必需 描述
  • 无需请求参数

    请求示例:

   GET https://gic-ossapi.capitalonline.net/ossapi/DescribeRegions/?Action=DescribeRegions&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=5b80e215-7c1b-11ed-af0c-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-15T01%3A54%3A05Z&Version=2019-08-08&Signature=pGm9BiUbypvhWJGYW0YpeiefJd8%3D
1

返回示例:

{
 "Code": "Success",
 "Msg": "Success",
 "Data": [{
 	"id": "1",
 	"name": "北京五",
 	"region": "oss-cn-beijing",
 	"endpoint": "oss-cnbj01.cdsgss.com"
 }, {
 	"id": "11",
 	"name": "新加坡",
 	"region": "oss-sg-sgp",
 	"endpoint": "oss-sgp.cdsgss.com"
 }, {
 	"id": "2",
 	"name": "法兰克福",
 	"region": "oss-en-fra",
 	"endpoint": "oss-fra.cdsgss.com"
 }, {
 	"id": "3",
 	"name": "达拉斯",
 	"region": "oss-us-dal",
 	"endpoint": "oss-dal.cdsgss.com"
 }, {
 	"id": "6",
 	"name": "宿迁",
 	"region": "oss-cn-sq",
 	"endpoint": "oss-cnsq01.cdsgss.com"
 }],
 "RequestId": "132d522f-f250-45df-b233-58ed64ceb39d"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
Data数组的item json 是 节点信息描述
id 数字 是 节点id,唯一标识
name 字符串 是 节点名称
region 字符串 是 节点所属区域
endpoint 字符串 是 节点endpoint,用户上传对象的访问域名

# DescribeProjects

**Action:**DescribeProjects

**描述:**查询当前所有者对应的项目管理信息。

**请求方法:**GET

参数:

  • 请求元素
名称 类型 是否必需 描述
  • 无需请求参数

    请求示例:

注意事项:

  • 使用DescribeProjects接口时,有如下注意事项:

    • 无

请求示例:

 GET https://gic-ossapi.capitalonline.net/ossapi/DescribeProjects/?Action=DescribeProjects&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=5b80e215-7c1b-11ed-af0c-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-15T01%3A54%3A05Z&Version=2019-08-08&Signature=pGm9BiUbypvhWJGYW0YpeiefJd8%3D
1

返回示例:

{
  "Code": "Success",
  "Msg": "Success",
  "Data": [
    {
      "sort": 9999999,
      "remark": "每个客户默认的项目组",
      "name": "默认项目组",
      "create_time": "",
      "customer_id": "",
      "id": "0-0"
    },
    {
      "sort": 0,
      "remark": "",
      "name": "测试组",
      "create_time": "2022-12-08 11:54:44",
      "customer_id": "E2129039",
      "id": "0ce7ec3a-76ac-11ed-9227-0ad8d3aab390"
    }
  ],
  "RequestId": "e65e4906-457b-45c9-8367-439e8690231c"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
Data数组的item json 是 节点信息描述
id 字符串 是 节点id,唯一标识
name 字符串 是 项目管理名称
sort 数字 是 排序字段

# DescribeBuckets

Action: DescribeBuckets

描述: 查询请求所有者的所有存储空间(Bucket)的相关信息。

请求方法: GET

参数:

名称 类型 是否必需 描述
bucket_type 字符串 否 过滤条件,存储空间类型,默认""(可选范围public or private)
alias_name 字符串 否 过滤调,存储空间别名,默认""

headers参数:

名称 类型 是否必需 描述
Host 字符串 否 过滤条件,按存储空间名称或存储空间加endpoint限制查询范围。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用DescribeBuckets接口时,有如下注意事项:

    • header Host参数选填,可通过Host过滤查询范围

请求示例:

GET https://gic-ossapi.capitalonline.net/ossapi/DescribeBuckets/?Action=DescribeBuckets&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=edd1a2f2-7c41-11ed-8df3-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-15T06%3A30%3A12Z&Version=2019-08-08&Signature=1%2BKpy1nHF6HBZtNdr6PT8dxfZKg%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
1
2

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": [{
		"id": "7bb541c6-75da-11ed-9cc2-2e526c464a8b",
		"name": "cdn-logs",
		"bucket_name": "cdn-logs",
		"type": "public",
		"type_display": "公共空间",
		"object_count": 0,
		"create_time": "2022-12-07T02:54:37Z",
		"endpoint_url": "http://cdn-logs.4ab18755406843d98afd21eb9a3ec960.oss-cnbj01.cdsgss.com",
		"status": "ENABLED",
		"status_display": "启用",
		"site": {
			"id": "1",
			"name": "北京五"
		},
		"user_id": "647595",
		"customer_id": "E889466"
	}, {
		"id": "7cb4e7cfc9c85faa84369cf0d273d7e4",
		"name": "eslogbakcup-cdn-logs-data",
		"bucket_name": "eslogbakcup-cdn-logs-data",
		"type": "private",
		"type_display": "私有空间",
		"object_count": 0,
		"create_time": "2021-01-06T11:41:27Z",
		"endpoint_url": "http://eslogbakcup-cdn-logs-data.4ab18755406843d98afd21eb9a3ec960.oss-cnbj01.cdsgss.com",
		"status": "ENABLED",
		"status_display": "启用",
		"site": {
			"id": "1",
			"name": "北京五"
		},
		"user_id": "647595",
		"customer_id": "E889466"
	}],
	"RequestId": "93c05f80-e563-4035-8da5-5eb0fda3d1b3"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
Data数组的item json 是 节点信息描述
id 字符串 是 存储空间id,唯一标识
name 字符串 是 存储空间别名
type 字符串 是 存储空间类型
type_display 字符串 是 存储空间显示名称
object_count 数字 是 存储空间下的对象个数
create_time 日期 是 创建时间
endpoint_url 字符串 是 容器的对应的域名访问地址
status 字符串 是 状态
site json 是 节点信息
user_id 字符串 是 用户ID
customer_id 字符串 是 客户ID

​

# PutBucket

Action: PutBucket

描述: 创建存储空间(Bucket)。

请求方法: PUT

参数:

名称 类型 是否必需 描述
bucket_type 字符串 是 存储空间类型(可选范围public or private)
alias_name 字符串 否 存储空间别名,默认存储空间名称
project_id 字符串 否 项目id,默认"0-0"
tags 数组集合 否 标签集合
tag 对象 否 标签对象
key 字符串 是 标签名称,如果tag对象不为空该值必填
value 字符串 否 标签值,默认""

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用PutBucket接口时,有如下注意事项:

    • header Host参数必填,必须通过Host参数指定创建的存储空间名称以及对应的节点的endpoint地址;存储空间名称必须唯一且只能是a-z0-9正则规范,名称长度必须大于3小于36个字符

请求示例:

PUT https://gic-ossapi.capitalonline.net/ossapi/PutBucket/?Action=PutBucket&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=43ba26d5-7c5b-11ed-8719-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-15T09%3A31%3A33Z&Version=2019-08-08&Signature=oG1yGrseNI9XYjnZVCf49eZRIbM%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"bucket_type": "public"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"id": "45b3a360-7c5b-11ed-9a11-2e526c464a8b",
		"bucket_name": "test001",
		"bucket_type": "public",
		"endpoint": "oss-cnbj01.cdsgss.com",
		"site_id": "1"
	},
	"RequestId": "24cbdd26-59be-4d20-9815-5b49bfd35190"
}
1
2
3
4
5
6
7
8
9
10
11
12
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
id 字符串 是 存储空间id,唯一标识
bucket_name 字符串 是 存储空间
bucket_type 字符串 是 存储空间类型
endpoint 字符串 是 存储空间的对应的endpoint地址
site_id 字符串 是 节点id

# PutBucketTags

Action: PutBucketTags

描述: 用于给某个存储空间(Bucket)添加或修改标签。

请求方法: PUT

参数:

名称 类型 是否必需 描述
tags 集合 是 需要修改的标签集合,如传递[]会删除所有标签
tag 对象 否 标签对象
key 字符串 是 用户自定义标签的key,如tags数组元素大于等于1,该值必填
value 字符串 否 用户自定义标签的vlaue

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用PutBucketTags接口时,有如下注意事项:
    • 只有Bucket的拥有者才能为Bucket设置标签,否则返回403 Forbudden错误,错误码为AccessDenied。
    • 最多可设置10对Bucket标签(Key-Value对),不可设置重复的标签
    • PutBucketTags是覆盖语义,即新添加的标签会完全覆盖已有的标签。

请求示例:

PUT https://gic-ossapi.capitalonline.net/ossapi/PutBucketTags/?Action=PutBucketTags&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=a29b2226-7f63-11ed-af69-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T06%3A09%3A02Z&Version=2019-08-08&Signature=TqED%2B%2BNebz0dUZ58eJkvs48M%2Bes%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"tags": [{"key": "value", "key1": "value"}]}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"tags": [{
			"key": "a",
			"value": "value"
		}]
	},
	"RequestId": "b2924680-daf9-401f-ac44-f32309c7e862"
}
1
2
3
4
5
6
7
8
9
10
11
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
tags 数组集合 是 修改生效后的标签信息
key 字符串 是 用户自定义标签的标签key
value 字符串 是 用户自定义标签的标签value

# GetBucketInfo

Action: GetBucketInfo

描述: 查询存储空间(Bucket)的存储容量以及文件对象(Object)信息。

请求方法: GET

参数:

名称 类型 是否必需 描述

无

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用GetBucketInfo接口时,有如下注意事项:
    • 如存储空间下有很多对象会造成请求时间变长

请求示例:

GET https://gic-ossapi.capitalonline.net/ossapi/GetBucketInfo/?Action=GetBucketInfo&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=89d930e9-7f68-11ed-8a1c-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T06%3A44%3A08Z&Version=2019-08-08&Signature=yX4yLLS0HrsKOYiD54A76ZVOpek%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
1
2
3

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"bucket_object_count": 0,
		"bucket_bytes_used": 0,
		"storage_policy": "ec7",
		"last_modified": "Thu, 15 Dec 2022 09:31:39 GMT",
		"bucket_read": ".r:*,.rlistings",
		"bucket_type": "public",
		"object_list": []
	},
	"RequestId": "17f640c0-62e2-4c49-b7c7-c4a294cf4eb6"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
bucket_object_count 数字 是 存储空间对象数量
bucket_bytes_used 数字 是 存储空间使用量,单位字节
storage_policy 字符串 是 存储策略
last_modified 字符串 是 最后修改时间
bucket_read 字符串 是 存储空间对容器操作权限
bucket_type 字符串 是 存储空间类型
object_list 数组集合 是 存储空间下的对象

# GetBucketStat

Action: GetBucketStat

描述: 查询存储空间(Bucket)的相关信息。

请求方法: GET

参数:

名称 类型 是否必需 描述

无

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用GetBucketStat接口时,有如下注意事项: 跟GetBucketInfo比对不会返回存储空间的object_list对象信息

请求示例:

PUT https://gic-ossapi.capitalonline.net/ossapi/PutBucketTags/?Action=PutBucketTags&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=a29b2226-7f63-11ed-af69-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T06%3A09%3A02Z&Version=2019-08-08&Signature=TqED%2B%2BNebz0dUZ58eJkvs48M%2Bes%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"tags": [{"key": "value", "key1": "value"}]}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"bucket_object_count": 4,
		"bucket_bytes_used": 1222476,
		"storage_policy": "ec7",
		"last_modified": "Mon, 19 Dec 2022 06:09:04 GMT",
		"bucket_read": ".r:*,.rlistings",
		"bucket_type": "public"
	},
	"RequestId": "81ed8b6d-6ba2-4df3-b8de-26691603a63f"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
bucket_object_count 数字 是 存储空间对象数量
bucket_bytes_used 数字 是 存储空间使用量,单位字节
storage_policy 字符串 是 存储策略
last_modified 字符串 是 最后修改时间
bucket_read 字符串 是 存储空间对容器操作权限
bucket_type 字符串 是 存储空间类型

# GetBucketTags

Action: GetBucketTags

描述: 用于给某个存储空间(Bucket)添加或修改标签。

请求方法: GET

参数:

名称 类型 是否必需 描述

无

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用GetBucketTags接口时,有如下注意事项:
    • 无

请求示例:

GET https://gic-ossapi.capitalonline.net/ossapi/GetBucketTags/?Action=GetObjectTags&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=9eea2e86-7f76-11ed-af2c-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T08%3A24%3A56Z&Version=2019-08-08&Signature=usZxX29EhOzFk1c9WgieD%2Bs2HOg%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
1
2
3

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"tags": [{
			"key": "a",
			"value": "value"
		}]
	},
	"RequestId": "93a05c3a-0e48-4ee4-a0dd-2db098b70b1e"
}
1
2
3
4
5
6
7
8
9
10
11
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
tags 数组集合 是 修改生效后的标签信息
key 字符串 是 用户自定义标签的标签key
value 字符串 是 用户自定义标签的标签value

# DeleteBucket

Action: DeleteBucket

描述: 删除指定存储空间(Bucket)。

请求方法: DELETE

参数:

名称 类型 是否必需 描述

无

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用DeleteBucket接口时,有如下注意事项:
    • 删除存储空间前必须清除存储空间下的所有对象,且删除后不能恢复,请谨慎操作

请求示例:

DELETE https://gic-ossapi.capitalonline.net/ossapi/DeleteBucket/?Action=PutBucketTags&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=a29b2226-7f63-11ed-af69-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T06%3A09%3A02Z&Version=2019-08-08&Signature=TqED%2B%2BNebz0dUZ58eJkvs48M%2Bes%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
1
2
3

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {},
	"RequestId": "b2924680-daf9-401f-ac44-f32309c7e862"
}
1
2
3
4
5
6
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果

# DeleteBucketTags

Action: DeleteBucketTags

描述: 删除指定存储空间(Bucket)的标签信息 。

请求方法: DELETE

参数:

名称 类型 是否必需 描述

无

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用DeleteBucketTags接口时,有如下注意事项:
    • 无

请求示例:

DELETE https://gic-ossapi.capitalonline.net/ossapi/DeleteBucketTags/?Action=DeleteBucketTags&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=bf2fb7c5-7f77-11ed-9e5b-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T08%3A33%3A00Z&Version=2019-08-08&Signature=pKPP4kO%2F3WrDXJkZ4VH1CGI7VtY%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"tags": [{"key": "value", "key1": "value"}]}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"tags": []
	},
	"RequestId": "a75acc5e-70f3-495a-b2c4-5256e497f59c"
}
1
2
3
4
5
6
7
8
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
tags 数组集合 是 删除生效后的标签信息

# UplodObject

Action: UplodObject

描述: 上传对象(Object)。

请求方法: POST

参数:

名称 类型 是否必需 描述
files 文件流 是 需要把本地对象转换为文件流进行上传
key 字符串 是 上传到对象存储的对象名称
tags 数组集合 否 上对到对象的标签集合
key 字符串 是 对象标签名称,如果tag对象不为空该值必填
value 字符串 否 对象标签值,默认""

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用UplodObject接口时,有如下注意事项:
    • header 的Content-Type必须为multipart/form-data;

请求示例:

POST https://gic-ossapi.capitalonline.net/ossapi/UploadObject/?Action=UploadObject&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=48b9f354-7f79-11ed-b635-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T08%3A44%3A00Z&Version=2019-08-08&Signature=YcaMmROsUnUk8z7hZWPQhZNG6YY%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'multipart/form-data; boundary=1d4e13d874451c75de18d976f0e86b35'
--data '--1d4e13d874451c75de18d976f0e86b35\r\nContent-Disposition: form-data; name="files"; filename="support.py"'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"content_type": "text/html; charset=UTF-8",
		"date": "Mon, 19 Dec 2022 09:06:11 GMT",
		"tags": [{
			"key": "key",
			"value": "value"
		}]
	},
	"RequestId": "b8c5e665-3f2b-4881-b9fb-83dc4b5819f2"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
date 日期 是 上传的对象的实际
tags 数组集合 是 标签信息
key 字符串 是 用户自定义对象标签key
value 字符串 是 用户自定义对象标签value

# UploadText

Action: UploadText

描述: 上传字符串以文本对象存储到对象存储(Object)。

请求方法: POST

参数:

名称 类型 是否必需 描述
key 字符串 是 上传到对象存储的对象名称
content 字符串 是 上传字的符串
tags 数组集合 否 上对到对象的标签集合
key 字符串 是 对象标签名称,如果tag对象不为空该值必填
value 字符串 否 对象标签值,默认""

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用UploadText接口时,有如下注意事项:

    • 无

请求示例:

POST https://gic-ossapi.capitalonline.net/ossapi/UploadText/?Action=UploadText&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=71d60ecc-7f7e-11ed-a82c-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T09%3A20%3A57Z&Version=2019-08-08&Signature=xI9SY9AELHxwJpaNPTy16g1A24M%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"key": "test.txt", "content": "我是测试字符串"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"content_type": "text/html; charset=UTF-8",
		"date": "Mon, 19 Dec 2022 09:20:58 GMT",
		"tags": []
	},
	"RequestId": "be752206-9606-4a54-b7ed-84f456d3f58e"
}
1
2
3
4
5
6
7
8
9
10
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
date 日期 是 上传的对象的实际
tags 数组集合 是 标签信息
key 字符串 是 用户自定义对象标签key
value 字符串 是 用户自定义对象标签value

# MultipartUpload

Action: MultipartUpload

描述: 初始化,获得Upload ID(大文件上传步骤1)。

请求方法: POST

参数:

名称 类型 是否必需 描述
key 字符串 是 上传到对象存储的对象名称

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用MultipartUpload接口时,有如下注意事项:

    • 大于5G的文件必须进行切片;且每个片的不能大于5G小于5M;片总数不能超过1000片
    • 读取对象应根据终端的内存大小,逐步读取文件
    • 大文件切片上传分为3个步骤;(初始化:MultipartUpload 上传切片:UploadPart 完成切片:CompleteMultipartUpload)

请求示例:

POST https://gic-ossapi.capitalonline.net/ossapi/MultipartUpload/?Action=InitiateMultipartUpload&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=8e97da35-7f80-11ed-b604-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T09%3A36%3A04Z&Version=2019-08-08&Signature=emt6R7jGkTmxZ%2BwvUW4X4yQ0cLI%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"key": "rclone-v1.60.0-windows-amd64.zip"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"Upload_Id": "NTM4YzBkMjgtOTIxZC00N2FlLTlhYmItNjYxYjFmMTY0MDc2",
		"Key": "rclone-v1.60.0-windows-amd64.zip"
	},
	"RequestId": "bc755ba6-dad6-4b88-9f6e-dec4abe9d712"
}
1
2
3
4
5
6
7
8
9
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
Upload_Id 字符串 是 本次上传对象的唯一标识
key 字符串 是 上传到对象存储的对象名称

# UploadPart

Action: UploadPart

描述: 上传分片对象(大文件上传步骤2)。。

请求方法: POST

参数:

名称 类型 是否必需 描述
files 文件流 是 切片后文件流
key 字符串 是 上传到对象存储的对象名称
upload_id 字符串 否 MultipartUpload方法返回的对象初始化唯一标识
part_number 数字 是 片序号,从1开始自增长即可

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用UploadPart接口时,有如下注意事项:
    • header 的Content-Type必须为multipart/form-data;
    • 大于5G的文件必须进行切片;且每个片的不能大于5G小于5M;片总数不能超过1000片
    • 读取对象应根据终端的内存大小,逐步读取文件
    • 大文件切片上传分为3个步骤;(初始化:MultipartUpload 上传切片:UploadPart 完成切片:CompleteMultipartUpload)

请求示例:

POST https://gic-ossapi.capitalonline.net/ossapi/UploadPart/?Action=UploadPart&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=91790468-7f80-11ed-8c0e-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T09%3A36%3A09Z&Version=2019-08-08&Signature=tcJmvZcPAxoh0oHqHqgTu5p2dpg%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'multipart/form-data; boundary=1d4e13d874451c75de18d976f0e86b35'
--data '--1d4e13d874451c75de18d976f0e86b35\r\nContent-Disposition: form-data; name="files"; filename="support.py"'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"part_id": "159b8a6d72256dcffc10050d3a6065bc",
		"content_type": "text/html; charset=UTF-8",
		"date": "Mon, 19 Dec 2022 09:36:09 GMT"
	},
	"RequestId": "00fc0377-18cd-4901-ad59-ca2036696609"
}
1
2
3
4
5
6
7
8
9
10
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
date 日期 是 上传的对象的实际
part_id 字符串 是 片的唯一标识

# CompleteMultipartUpload

Action: CompleteMultipartUpload

描述: 完成对象切片上传(大文件上传步骤3)。

请求方法: POST

参数:

名称 类型 是否必需 描述
key 字符串 是 上传到对象存储的对象名称
upload_id 字符串 是 初始化切片接口返回的切片文件唯一标识
multipart_info 数组集合 是 切片信息
part_id 字符串 是 片的唯一标识
part_number 数字 是 片的序号,需跟UploadPart传递的part_number一致

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用CompleteMultipartUpload接口时,有如下注意事项:

    • 大于5G的文件必须进行切片;且每个片的不能大于5G小于5M;片总数不能超过1000片
    • 读取对象应根据终端的内存大小,逐步读取文件
    • 大文件切片上传分为3个步骤;(初始化:MultipartUpload 上传切片:UploadPart 完成切片:CompleteMultipartUpload)

请求示例:

POST https://gic-ossapi.capitalonline.net/ossapi/CompleteMultipartUpload/?Action=CompleteMultipartUpload&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=939a4349-7f80-11ed-bede-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T09%3A36%3A12Z&Version=2019-08-08&Signature=KwSCbDZevbIMK6d0SFiCBZuW%2BKg%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"key": "rclone-v1.60.0-windows-amd64.zip", "upload_id": "NTM4YzBkMjgtOTIxZC00N2FlLTlhYmItNjYxYjFmMTY0MDc2", "multipart_info": [{"part_id": "159b8a6d72256dcffc10050d3a6065bc", "part_number": 1}, {"part_id": "46603f8275c2e60534109190fa8d9bf0", "part_number": 2}]}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"url": "https://4ab18755406843d98afd21eb9a3ec960.oss-cnbj01.cdsgss.com/cdn-logs/rclone-v1.60.0-windows-amd64.zip"
	},
	"RequestId": "5bdfc5a8-65fc-4ce2-be72-35d01081ed02"
}
1
2
3
4
5
6
7
8
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
url 字符串 是 对象的下载地址(如存储空间的类型为私有时,返回的的下载地址为有时效性)

# PutObjectTags

Action: PutObjectTags

描述: 更新对象对象(Object)标签信息。

请求方法: PUT

参数:

名称 类型 是否必需 描述
key 字符串 是 对象名称
tags 数组集合 否 标签集合
key 字符串 是 对象标签名称,如果tag对象不为空该值必填
value 字符串 否 对象标签值,默认""

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用PutObjectTags接口时,有如下注意事项:

    • 无

请求示例:

PUT https://gic-ossapi.capitalonline.net/ossapi/PutObjectTags/?Action=PutObjectTags&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=43ba26d5-7c5b-11ed-8719-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-15T09%3A31%3A33Z&Version=2019-08-08&Signature=oG1yGrseNI9XYjnZVCf49eZRIbM%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"key": "support.py", "tags": [{"key": "value"}]}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"tags": [{
			"key": "key",
			"value": "value"
		}]
	},
	"RequestId": "6fd2266a-bccc-4b58-94ae-703fad0b4f18"
}
1
2
3
4
5
6
7
8
9
10
11
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
tags 数组集合 是 修改生效后的对象标签信息
key 字符串 是 用户自定义标签的对象标签key
value 字符串 是 用户自定义标签的对象标签value

# DeleteObject

Action: DeleteObject

描述: 删除对象(Object)。

请求方法: DELETE

参数:

名称 类型 是否必需 描述
key 字符串 是 需要删除的对象名称

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用DeleteObject接口时,有如下注意事项:

    • 如未开启多版本删除后无法恢复,请谨慎操作

请求示例:

DELETE https://gic-ossapi.capitalonline.net/ossapi/DeleteObject/?Action=DeleteObject&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=711f3207-7f86-11ed-934d-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T10%3A18%3A11Z&Version=2019-08-08&Signature=opY7nuDeWAp7%2FSasCQ3jaoKRR6k%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"key": "support.py"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {},
	"RequestId": "e98e4c41-c683-4815-a8aa-db469d08df03"
}
1
2
3
4
5
6
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果

# DeletePrefixObjects

Action: DeletePrefixObjects

描述: 按前缀模糊删除对象(Object)。

请求方法: DeletePrefixObjects

参数:

名称 类型 是否必需 描述
prefix 字符串 是 模式删除的对象的条件

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用DeletePrefixObjects接口时,有如下注意事项:

    • 如未开启多版本删除后无法恢复,请谨慎操作
    • 单次模糊删除的对象最大不能超过1000
    • 如有很对对象都能满足命中条件,请在控制台设置生命周期进行删除即可

请求示例:

DELETE https://gic-ossapi.capitalonline.net/ossapi/DeletePrefixObjects/?Action=DeletePrefixObjects&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=711f3207-7f86-11ed-934d-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T10%3A18%3A11Z&Version=2019-08-08&Signature=opY7nuDeWAp7%2FSasCQ3jaoKRR6k%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"prefix": "t"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": ["test.txt"],
	"RequestId": "98e1db4f-8b3d-43e0-8338-506490fded5f"
}
1
2
3
4
5
6
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data 数组 是 成功删除的对象集合

# DeleteMultipleObjects

Action: DeleteMultipleObjects

描述: 批量删除对象(Object)。

请求方法: DELETE

参数:

名称 类型 是否必需 描述
keys 数组 是 需要删除的对象名称

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用DeleteMultipleObjects接口时,有如下注意事项:

    • 如未开启多版本删除后无法恢复,请谨慎操作
    • 单次请求删除的对象数组最大不能超过1000
    • 如有很对对象都能满足命中条件,请在控制台设置生命周期进行删除即可

请求示例:

DELETE https://gic-ossapi.capitalonline.net/ossapi/DeleteMultipleObjects/?Action=DeleteMultipleObjects&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=711f3207-7f86-11ed-934d-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T10%3A18%3A11Z&Version=2019-08-08&Signature=opY7nuDeWAp7%2FSasCQ3jaoKRR6k%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"keys": ["test/test1.txt", "test/test2.txt"]}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": ["test/test2.txt", "test/test1.txt"],
	"RequestId": "33371659-e56c-4042-b52f-e38097b86fca"
}
1
2
3
4
5
6
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 批量删除的对象

# DescribeSTS

Action: DescribeSTS

描述: 获取用户临时上传签名(用于前端表单直接上传到对象存储)。

请求方法: POST

参数:

名称 类型 是否必需 描述
dir_path 字符串 是 文件上传到容器的目录,根目录:"",其他目录以“/”结尾,示例:“test/a/”
expires 字符串 否 签名有效期,默认300秒
max_file_count 字符串 否 单次请求最多允许上传的文件数量,默认50

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用DescribeSTS接口时,有如下注意事项:

    • 无

请求示例:

POST https://gic-ossapi.capitalonline.net/ossapi/DescribeSTS/?Action=DescribeSTS&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=4f9d6511-8004-11ed-9317-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-20T01%3A19%3A12Z&Version=2019-08-08&Signature=bg7bqItSSnUyRDx7x1WHpAKwg2c%3D

--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"dir_path": "", "expires": 3600, "max_file_count": 100}'
1
2
3
4
5

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"upload_url": "https://oss-cnbj01.cdsgss.com/v1/AUTH_4ab18755406843d98afd21eb9a3ec960/cdn-logs",
		"redirect": "",
		"max_file_size": 524288000,
		"max_file_count": 100,
		"expires": 1671502753,
		"signature": "13b4ce7edf0369d33377e7af46ed1cecf5ebf69e"
	},
	"RequestId": "3ab8c597-6ecf-4a54-8210-7cb29cde27a2"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
upload_url 字符串 是 文件上传到容器的目录地址
max_file_size 字符串 是 单次最大允许上传的文件大小
max_file_count 字符串 是 单次请求最多允许上传的文件数量
expires 字符串 是 有效期
signature 字符串 是 签名信息

上传示例:

curl --location --request POST 'https://oss-cnbj01.cdsgss.com/v1/AUTH_5e29863a6e8e41fca3e1dd4440273a72/test-domain/test/a/' \
--form 'signature="722676d6ed1200bbad6f232dfb3e42952f592c56"' \
--form 'expires="1631518899"' \
--form 'max_file_count="50"' \
--form 'max_file_size="524288000"' \
--form 'file=@"/C:/Users/Administrator/AppData/Local/Postman/app-8.12.0/libEGL.dll"'
1
2
3
4
5
6

# GetObject

Action: GetObject

描述: 下载对象(以返回url地址方式进行下载)。

请求方法: GET

参数:

名称 类型 是否必需 描述
key 字符串 是 对象名称

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用GetObject接口时,有如下注意事项:

    • 功能等同GeneratePresignedurl,需要请求url地址自行下载

请求示例:

GET https://gic-ossapi.capitalonline.net/ossapi/GetObject/?Action=GetObject&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=4d7ec07e-8006-11ed-9ee3-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-20T01%3A33%3A27Z&Version=2019-08-08&key=test%2Ftest1.txt&Signature=MNZOtBS%2BJmo%2Bxw7Qj12sN2PkU4M%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"key": "test/test1.txt"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"url": "https://4ab18755406843d98afd21eb9a3ec960.oss-cnbj01.cdsgss.com/cdn-logs/test/test1.txt"
	},
	"RequestId": "3ddd8f4c-6632-488e-9d1d-416998bef4a4"
}
1
2
3
4
5
6
7
8
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
url 字符串 是 下载地址

# GeneratePresignedurl

Action: GeneratePresignedurl

描述: 获取对象下载的url地址(私有存储空间可以获取带签名的url地址)。

请求方法: GET

参数:

名称 类型 是否必需 描述
key 字符串 是 对象名称

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用GeneratePresignedurl接口时,有如下注意事项:

请求示例:

GET https://gic-ossapi.capitalonline.net/ossapi/GeneratePresignedurl/?Action=GeneratePresignedurl&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=4d7ec07e-8006-11ed-9ee3-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-20T01%3A33%3A27Z&Version=2019-08-08&key=test%2Ftest1.txt&Signature=MNZOtBS%2BJmo%2Bxw7Qj12sN2PkU4M%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"key": "test/test1.txt"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"url": "https://4ab18755406843d98afd21eb9a3ec960.oss-cnbj01.cdsgss.com/cdn-logs/test/test1.txt"
	},
	"RequestId": "3ddd8f4c-6632-488e-9d1d-416998bef4a4"
}
1
2
3
4
5
6
7
8
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
url 字符串 是 下载地址

# ListObjects

Action: ListObjects

描述: 查询存储空间下的对象信息(Object)。

请求方法: GET

参数:

名称 类型 是否必需 描述
prefix 字符串 是 对象模糊搜索条件
limit 字符串 是 每个最多显示条数
pre_marker 字符串 是 上一页索引,当前页面第一个对象key
next_marker 字符串 是 下一页索引,当前页面最后一个对象key
is_versions 字符串 是 是否显示多版本信息
version_marker 字符串 是 版本分页编辑器

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用ListObjects接口时,有如下注意事项:

    • 无

请求示例:

GET https://gic-ossapi.capitalonline.net/ossapi/ListObjects/?Action=ListObjects&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=06d8e192-8007-11ed-a852-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-20T01%3A38%3A38Z&Version=2019-08-08&limit=3&prefix=1&Signature=TddgK1aK9nj4yUvu9%2B9iGs%2FoN84%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"limit": "30", "prefix": "1"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"bucket": {
			"id": "7bb541c6-75da-11ed-9cc2-2e526c464a8b",
			"bucket_name": "cdn-logs",
			"object_num": "8",
			"object_used": "1223537"
		},
		"object_list": [{
			"name": "1.txt",
			"path": "1.txt",
			"is_dir": false,
			"is_object": true,
			"bytes": 611238,
			"content_type": "application/octet-stream",
			"last_modified": "2022-12-07T02:56:30.254920"
		}],
		"is_previous_page": false,
		"is_next_page": false
	},
	"RequestId": "a1413ab6-c578-42d5-bf01-54ea39e208cc"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
bucket json对象 是 存储空间信息
bucket_name 字符串 是 存储空间名称
object_num 数字 是 对象总数
object_used 数字 是 对象使用量
object_list json对象 是 对象信息
name 字符串 是 对象名称
path 字符串 是 对象路径
is_dir 字符串 是 是否为目录
is_object 字符串 是 是否为对象
bytes 数字 是 对象大小单位字节
content_type 字符串 是 对象类型
last_modified 日期 是 最后修改时间

# HeadObject

Action: HeadObject

描述: 查询对象的headers信息。

请求方法: GET

参数:

名称 类型 是否必需 描述
key 字符串 是 对象名称

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用HeadObject接口时,有如下注意事项:

    • 无

请求示例:

GET https://gic-ossapi.capitalonline.net/ossapi/HeadObject/?Action=HeadObject&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=25296080-8009-11ed-a982-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-20T01%3A53%3A48Z&Version=2019-08-08&key=test%2Ftest1.txt&Signature=dgX1j2VdzBN1H6eT%2F0xEO8nZsMo%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"key": "test/test1.txt"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"last_modified": "2022-12-20T01:53:35Z",
		"content_length": 21,
		"content_type": "binary/octet-stream"
	},
	"RequestId": "59d4f6bd-e7b3-4771-8d36-1b3abbd91b47"
}
1
2
3
4
5
6
7
8
9
10
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
last_modified 日期 是 对象最后修改时间
content_length 字符串 是 对象长度
content_type 字符串 是 对象类型

# GetObjectTags

Action: GetObjectTags

描述: 查询对象标签。

请求方法: GET

参数:

名称 类型 是否必需 描述
key 字符串 是 对象名称

headers参数:

名称 类型 是否必需 描述
Host 字符串 是 存储空间名称和存储空间所在节点endpoint地址。示例:{'Host': 'test001.oss-cnbj01.cdsgss.com'} 其中test001未存储空间名称,oss-cnbj01.cdsgss.com为北京节点的endpoint地址

注意事项:

  • 使用GetObjectTags接口时,有如下注意事项:

    • 无

请求示例:

GET https://gic-ossapi.capitalonline.net/ossapi/GetObjectTags/?Action=GetObjectTags&AccessKeyId=6bb3b2bc72f411ea86d9b21a0a12c617&SignatureMethod=HMAC-SHA1&SignatureNonce=711f3207-7f86-11ed-934d-646c80cc670e&SignatureVersion=1.0&Timestamp=2022-12-19T10%3A18%3A11Z&Version=2019-08-08&Signature=opY7nuDeWAp7%2FSasCQ3jaoKRR6k%3D
--header 'Host':'test001.oss-cnbj01.cdsgss.com'
--header 'Content-Type': 'application/json'
--data '{"key": "support.py"}'
1
2
3
4

返回示例:

{
	"Code": "Success",
	"Msg": "Success",
	"Data": {
		"tags": [{
			"key": "key",
			"value": "value"
		}]
	},
	"RequestId": "87284624-aebf-4c29-adec-9277d03c5c3e"
}
1
2
3
4
5
6
7
8
9
10
11
  • 响应元素
名称 类型 是否必需 描述
Code 字符串 是 状态码;正常状态码为:Success,其他参考异常状态码
Msg 字符串 是 错误提示,如Code为异常状态码时,该值有错误提示
Data json对象 是 响应的结果
tags 数组集合 是 对象标签信息
key 字符串 是 用户自定义对象标签的key
value 字符串 是 用户自定义对象标签的value

python调用示例:(需替换自己的ak,sk,bucket名称)

import json
import sys
import time
import uuid
import hmac
from urllib import parse
import base64
from hashlib import sha1
import requests
from openapi import support
from urllib3 import encode_multipart_formdata

# getaway 对象存储api地址
OSSPRODBJURL = 'https://gic-ossapi.capitalonline.net/ossapi'


# 用户密钥,需要替换成自己的
AK = 'xxxxxxxxxxxx'
SK = 'xxxxxxxxxxxx'

# 对象存储节点endpoint
endpoint = "oss-cnbj01.cdsgss.com"

# 对象存储空间
bucket = "test001"

# 通用headers
headers = {
    "Host": f'{bucket}.{endpoint}'
}


def percentEncode(str):
    # res = parse.quote(str.decode(sys.stdin.encoding).encode('utf8'), '')
    res = parse.quote(str, '')
    res = res.replace('+', '%20')
    res = res.replace('*', '%2A')
    res = res.replace('%7E', '~')
    # logger.info('percentencode: %s', res)
    return res


def get_signature(action, ak, access_key_secret, method, url, param={}):
    """
    @params: action: 接口动作
    @params: ak: ak值
    @params: access_key_secret: ak秘钥
    @params: method: 接口调用方法(POST/GET)
    @params: param: 接口调用Query中参数(非POST方法Body中参数)
    @params: url: 接口调用路径
    """
    timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
    D = {
        'Action': action,
        'AccessKeyId': ak,
        'SignatureMethod': 'HMAC-SHA1',
        'SignatureNonce': str(uuid.uuid1()),
        'SignatureVersion': "1.0",
        "Timestamp": timestamp,
        'Version': '2019-08-08',
    }

    if param:
        D.update(param)

    sortedD = sorted(D.items(), key=lambda x: x[0])
    canstring = ''
    for k, v in sortedD:
        canstring += '&' + percentEncode(k) + '=' + percentEncode(v)

    stringToSign = method + '&%2F&' + percentEncode(canstring[1:])
    stringToSign = stringToSign.encode('utf-8')
    # print(stringToSign)
    access_key_secret = access_key_secret.encode('utf-8')
    h = hmac.new(access_key_secret, stringToSign, sha1)
    signature = base64.encodebytes(h.digest()).strip()
    D['Signature'] = signature
    url = url + '/?' + parse.urlencode(D)
    # print(url)
    print('Had got url:', url)
    return url


class BucketOperationApi():
    '''
    存储空间操作类
    '''
    def __init__(self, AK, SK, header):
        self.gatetagurl = OSSPRODBJURL
        self.ak = AK
        self.sk = SK
        self.header = header

    def put_bucket(self, bucket_type="public", alias_name=None, tags=None):
        action = "PutBucket"
        method = "PUT"
        body = {
            "bucket_type": bucket_type,
        }
        if alias_name:
            body.update({"alias_name": alias_name})
        if tags:
            body.update({"tags": tags})
        print("请求header:%s" % self.header)
        print("请求参数:%s" % body)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/PutBucket')
        response = requests.put(url, headers=self.header, json=body)
        print("创建容器 text:%s" % (response.text))
        print("创建容器 header:%s" % (response.headers))
        print("创建容器 status_code: %s" % (response.status_code))


class ObjectOperationApi():
    def __init__(self, AK, SK, header):
        self.gatetagurl = OSSPRODBJURL
        self.ak = AK
        self.sk = SK
        self.header = header

    def head_object(self, key, version_id=None):
        action = "HeadObject"
        method = "GET"
        header = {
            'Host': 'aaa4.oss-test.cdsgss.com:6002'
        }
        param = {
            "key": key
        }
        if version_id:
            param.update({"version_id": version_id})

        print(param)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/HeadObject', param)
        response = requests.get(url, headers=self.header, params=param)
        print("对象head text:", response.text)
        print("对象head header:", response.headers)
        print("对象head status_code", response.status_code)
        # r = response.json()
        # return r

    def get_object_meta(self, key, version_id=None):
        action = "GetObjectMeta"
        method = "GET"
        param = {
            "key": key
        }
        if version_id:
            param.update({"version_id": version_id})
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl, param)
        response = requests.get(url, headers=self.header, params=param)
        print("对象meta text:", response.text)
        print("对象meta header:", response.headers)
        print("对象meta status_code", response.status_code)
        r = response.json()
        return r

    def put_object(self, key, file):
        action = "UploadObject"
        method = "POST"

        from urllib3 import encode_multipart_formdata
        file_data = {'files': (key, open(file, 'rb').read()),
                     'key': key, 'tags':json.dumps([{"key":"value"}])}
        encode_data = encode_multipart_formdata(file_data)
        print('encode_data:', encode_data)
        data = encode_data[0]
        self.header.update({'Content-Type': encode_data[1]})
        print(self.header)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/UploadObject')
        response = requests.post(url, headers=self.header, data=data)
        print("对象上传 text:", response.text)
        print("对象上传 header:", response.headers)
        print("对象上传 status_code", response.status_code)

    def put_text(self, key, content=None):
        action = "UploadText"
        method = "POST"
        body = {
            "key": key
        }
        if content:
            body.update({"content": content})
        print(self.header)
        print(body)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/UploadText')
        response = requests.post(url, headers=self.header, json=body)
        print("对象字符串 text:", response.text)
        print("对象字符串 header:", response.headers)
        print("对象字符串 status_code", response.status_code)
        r = response.json()
        return r

    def get_object(self, key, version_id=None):
        action = "GetObject"
        method = "GET"
        param = {
            "key": key
        }
        if version_id:
            param.update({"version_id": version_id})
        # print(header)
        print(param)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/GetObject', param)
        response = requests.get(url, headers=self.header, params=param)
        # with open(file_name, 'wb') as f:
        #     f.write(response.content)
        print("对象 %s 下载 text:%s" % (key, response.text))
        print("对象 %s 下载 header:%s" % (key, response.headers))
        print("对象 %s 下载 status_code: %s" % (key, response.status_code))
        # r = response.json()
        # return r

    def delete_object(self, key, version_id=None):
        action = "DeleteObject"
        method = "DELETE"
        data = {
            "key": key
        }
        if version_id:
            data.update({"version_id": version_id})
        # print(header)
        print(data)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/DeleteObject')
        response = requests.delete(url, headers=self.header, json=data)
        print("对象 %s 删除 text:%s" % (key, response.text))
        print("对象 %s 删除 header:%s" % (key, response.headers))
        print("对象删除 status_code", response.status_code)
        # r = response.json()
        # return r

    def delete_many_objects(self, keys):
        action = "DeleteMultipleObjects"
        method = "DELETE"
        data = {
            # keys为list类型
            "keys": keys
        }
        print(self.header)
        print(data)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/DeleteMultipleObjects')
        response = requests.delete(url, headers=self.header, json=data)
        print("对象批量删除 text:", response.text)
        print("对象批量删除 header:", response.headers)
        print("对象批量删除 status_code", response.status_code)
        # r = response.json()
        # return r

    def delete_prefix_objects(self, prefix):
        action = "DeletePrefixObjects"
        method = "DELETE"
        data = {
            "prefix": prefix
        }
        print(self.header)
        print(data)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/DeletePrefixObjects')
        response = requests.delete(url, headers=self.header, json=data)
        print("对象前缀 %s 删除 text:%s" % (prefix, response.text))
        print("对象前缀 %s 删除 header:%s" % (prefix, response.headers))
        print("对象前缀 %s 删除 status_code: %s" % (prefix, response.status_code))

    def get_sym_link(self, key, version_id=None):
        action = "GeneratePresignedurl"
        method = "POST"
        param = {}
        header = {
            'Host': 'aaa4.oss-test.cdsgss.com:6002'
        }
        data = {
            "key": key
        }
        if version_id:
            data.update({"version_id": version_id})
        print(self.header)
        print(data)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/GeneratePresignedurl', param)
        response = requests.post(url, headers=self.header, json=data)
        print("对象 %s 下载链接 text:%s" % (key, response.text))
        print("对象 %s 下载链接 header:%s" % (key, response.headers))
        print("对象 %s 下载链接 status_code: %s" % (key, response.status_code))
        r = response.json()
        return r

    def init_multipart_upload(self, key):
        '''
        步骤1:初始化切片
        :param key:
        :return:
        '''
        action = "InitiateMultipartUpload"
        method = "POST"
        data = {
            "key": key
        }
        print(self.header)
        print(data)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl+'/MultipartUpload')
        response = requests.post(url, headers=self.header, json=data)
        print("对象 %s 切片初始化 text:%s" % (key, response.text))
        print("对象 %s 切片初始化 header:%s" % (key, response.headers))
        print("对象 %s 切片初始化 status_code: %s" % (key, response.status_code))
        # r = response.json()
        return response.status_code,response.text

    def upload_part(self, upload_id, key, content, part_number):
        '''
        步骤2:切片上传
        :param upload_id:
        :param key:
        :param content:
        :param part_number:
        :return:
        '''
        action = "UploadPart"
        method = "POST"
        file_data = {'files': (key, content),
                     "key": key,
                     "upload_id": upload_id,
                     "part_number": part_number,
                     }
        encode_data = encode_multipart_formdata(file_data)

        data = encode_data[0]
        header = {'Host': f'{bucket}.{endpoint}', 'Content-Type': encode_data[1]}
        print(header)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl+'/UploadPart')
        response = requests.post(url, headers=header, data=data)
        print("对象 %s 切片上传 text:%s" % (key, response.text))
        print("对象 %s 切片上传 header:%s" % (key, response.headers))
        print("对象 %s 切片上传 status_code: %s" % (key, response.status_code))
        # r = response.json()
        return response.status_code,response.text

    def complete_multipart_upload(self, key, upload_id, multipart_info):
        '''
        步骤3:完成分片上传
        :return:
        '''
        action = "CompleteMultipartUpload"
        method = "POST"

        data = {'key': key, 'upload_id': upload_id, 'multipart_info': multipart_info}
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl+'/CompleteMultipartUpload')

        print(self.header)
        print(data)
        response = requests.post(url, headers=self.header, json=data)
        print("对象 %s 切片上传完成 text:%s" % (key, response.text))
        print("对象 %s 切片上传完成 header:%s" % (key, response.headers))
        print("对象 %s 切片上传完成 status_code: %s" % (key, response.status_code))
        # r = response.json()
        return response.status_code,response.text

    def multipart_upload(self, key, file):
        '''
        完整分片上传
        :param key:
        :return:
        '''
        status, resp = self.init_multipart_upload(key)
        if status == 200:
            mulitipart_info = json.loads(resp)
            print(mulitipart_info)
            upload_id = mulitipart_info.get('Data').get('Upload_Id')
            print(upload_id)
            i = 1

            file = open(file, 'rb')
            etags = []
            while 1:
                content = file.read(10 * 1024 * 1024)
                if content == b'':
                    break
                status, part_info = self.upload_part(upload_id=upload_id, key=key, content=content, part_number=i)
                print(part_info)
                if status == 200:
                    mulitipart_info = json.loads(part_info)
                    etags.append({'part_id': mulitipart_info.get('Data').get('part_id'), 'part_number': i})
                i += 1
                print(i)
            status, resp = self.complete_multipart_upload(key, upload_id, etags)
            print(resp)

    def put_object_tagging(self, key, tags=None):
        action = "PutObjectTags"
        method = "PUT"
        body = {
            "key": key,
        }
        if tags:
            body.update({'tags': tags})
        print(self.header)
        print(body)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/PutObjectTags')
        response = requests.put(url, headers=self.header, json=body)
        print("对象标签添加 text:%s" % (response.text))
        print("对象标签添加 header:%s" % (response.headers))
        print("对象标签添加 status_code: %s" % (response.status_code))
        # r = response.json()
        # return r

    def get_object_tagging(self, key, tags=None, version_id=None):
        action = "GetObjectTags"
        method = "GET"
        param = {'key': key}
        if tags:
            param.update({'tags': tags})
        if version_id:
            param.update({'version_id': version_id})
        print(self.header)
        print(param)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/GetObjectTags', param)
        response = requests.get(url, headers=self.header)
        print("对象标签查看 text:%s" % (response.text))
        print("对象标签查看 header:%s" % (response.headers))
        print("对象标签查看 status_code: %s" % (response.status_code))
        r = response.json()
        return r

    def delete_object_tagging(self, key):
        action = "DeleteObjectTags"
        method = "DELETE"
        body = {'key': key}
        print(self.header)
        print(body)
        url = get_signature(action, self.ak, self.sk, method, self.gatetagurl + '/DeleteObjectTags')
        response = requests.delete(url, headers=self.header, json=body)
        print("对象标签删除 text:%s" % (response.text))
        print("对象标签删除 header:%s" % (response.headers))
        print("对象标签删除 status_code: %s" % (response.status_code))


if __name__ == '__main__':
    bucket_service = BucketOperationApi(AK, SK, headers)
    # 创建桶
    # bucket_service.put_bucket()

    object_service = ObjectOperationApi(AK, SK, headers)
    # 上传对象
    # object_service.put_object(key='support.py', file=r'./support.py')

    # 大文件切片上传
    object_service.multipart_upload('rclone-v1.60.0-windows-amd64.zip', r'rclone-v1.60.0-windows-amd64.zip')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
对象存储
负载均衡

← 对象存储 负载均衡→