文档首页/ 对象存储服务 OBS/ SDK参考/ C/ 对象相关接口(C SDK)/ 多版本控制(C SDK)/ 设置多版本对象ACL-上传对象时指定预定义访问策略
更新时间:2026-07-13 GMT+08:00
分享

设置多版本对象ACL-上传对象时指定预定义访问策略

开发过程中,您有任何问题可以在GitHub上提交issue,或者在华为云对象存储服务论坛中发帖求助。

功能说明

OBS支持对多版本对象的操作进行权限控制。默认情况下,只有多版本对象的创建者才有该多版本对象的读写权限。用户也可以设置其他的访问策略,比如对一个多版本对象可以设置公共访问策略,允许所有人对其都有读权限。SSE-KMS方式加密的多版本对象即使设置了ACL,跨租户也不生效。

OBS用户在上传多版本对象时可以设置权限控制策略,也可以通过ACL操作API接口对已存在的多版本对象更改或者获取ACL(access control list) 。

可以通过本接口设置指定桶中多版本对象ACL。

接口约束

  • 您必须是桶拥有者或拥有设置对象ACL的权限,才能设置多版本对象ACL。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObjectAcl权限,如果使用桶策略则需授予PutObjectAcl权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略配置对象策略
  • OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点
  • 一个多版本对象的ACL最多支持配置100条授权策略。

方法定义

1
2
3
4
void put_object(const obs_options *options, char *key, uint64_t content_length,
                         obs_put_properties *put_properties,
                         server_side_encryption_params *encryption_params,
                         obs_put_object_handler *handler, void *callback_data);

请求参数说明

表1 请求参数列表

参数名称

参数类型

是否必选

描述

options

const obs_options*

必选

参数解释:

请求桶的上下文,配置option(C SDK),通过obs_options设置AK、SK、endpoint、bucket、超时时间、临时鉴权。

约束限制:

key

char *

必选

参数解释:

对象名。对象名是对象在桶中的完整路径,路径中不包含桶名。

例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。

约束限制:

同一个桶中存储的对象名必须是唯一的。

取值范围:

长度大于0且不超过1024的字符串。

默认取值:

content_length

uint64_t

必选

参数解释:

对象内容长度。

约束限制:

取值范围:

默认取值:

如果不设置,则SDK会自动计算对象数据的长度。

put_properties

obs_put_properties*

必选

参数解释:

上传对象属性。

约束限制:

encryption_params

server_side_encryption_params *

可选

参数解释:

上传对象加密设置。

约束限制:

handler

obs_put_object_handler *

必选

参数解释:

回调结构体,结构体内所有成员都是回调函数的指针,用于设置处理接口响应数据的回调函数。您可以通过设置回调函数,把服务端的响应数据复制到您的自定义回调数据callback_data中。

约束限制:

callback_data

void *

可选

参数解释:

用户自定义回调数据。

约束限制:

取值范围:

默认取值:

表2 obs_options

参数名称

参数类型

是否必选

描述

bucket_options

obs_bucket_context

必选

参数解释:

桶相关设置。

约束限制:

request_options

obs_http_request_option

必选

参数解释:

请求相关设置。

约束限制:

temp_auth

temp_auth_configure*

可选

参数解释:

用于临时计算签名的结构体,不使用时请设置为NULL。

约束限制:

表3 obs_bucket_context

参数名称

参数类型

是否必选

描述

host_name

char *

必选

参数解释

连接OBS的服务地址,请求使用的主机名,是指存放资源的服务器的域名,就是终端节点endpoint。

示例:host_name = "obs.cn-north-4.myhuaweicloud.com";

约束限制:

不需要带“http://”或“https://”前缀,通过obs_protocol控制是使用http协议还是https协议。

取值范围:

您可以从这里查看OBS当前开通的服务地址。

默认取值:

bucket_name

char *

必选

参数解释

桶名。

约束限制:

  • 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。

默认取值:

useCname

bool

可选

参数解释

是否通过自定义域名访问OBS服务。

约束限制:

取值范围:

true:通过自定义域名访问OBS服务。

false:不通过自定义域名访问OBS服务。

默认取值:

false

protocol

obs_protocol

可选

参数解释

是使用http协议还是https协议。

约束限制:

取值范围:

请详见obs_protocol

默认取值:

OBS_PROTOCOL_HTTPS(默认使用https协议)

access_key

char *

必选

参数解释:

访问密钥中的AK。

约束限制:

取值范围:

请详见创建访问密钥

默认取值:

secret_access_key

char *

必选

参数解释:

访问密钥中的SK。

约束限制:

取值范围:

请详见创建访问密钥

默认取值:

storage_class

obs_storage_class

可选

参数解释

创建桶时可指定的桶的存储类别。

约束限制:

取值范围:

请详见obs_storage_class

默认取值:

OBS_STORAGE_CLASS_STANDARD(指标准存储类别)

token

char *

可选

参数解释:

临时访问密钥中的SecurityToken。

约束限制:

取值范围:

请详见创建访问密钥

默认取值:

epid

char *

可选

参数解释

创建桶时可指定的企业项目ID,开通企业项目的用户可以从企业项目服务获取。

约束限制:

epid格式为uuid,未开通企业项目的用户可以不带该头域。

示例:9892d768-2d13-450f-aac7-ed0e44c2585f

默认取值:

bucket_type

obs_bucket_type

可选

参数解释

创建桶时,指定是对象桶还是并行文件系统。

约束限制:

取值范围:

请详见obs_bucket_type

默认取值:

OBS_BUCKET_OBJECT(指对象桶)

bucket_list_type

obs_bucket_list_type

可选

参数解释

列举桶时,确定列举桶的类型:所有桶、对象桶、并行文件系统。

约束限制:

取值范围:

请详见obs_bucket_list_type

表4 obs_storage_class

常量名

原始值

说明

OBS_STORAGE_CLASS_STANDARD

STANDARD

标准存储。

标准存储拥有低访问时延和较高的吞吐量,适用于有大量热点对象(平均一个月多次)或小对象(<1MB),且需要频繁访问数据的业务场景。

OBS_STORAGE_CLASS_STANDARD_IA

STANDARD_IA

低频访问存储。

低频访问存储适用于不频繁访问(平均一年少于12次)但在需要时也要求能够快速访问数据的业务场景。

OBS_STORAGE_CLASS_GLACIER

GLACIER

归档存储。

归档存储适用于很少访问(平均一年访问一次)数据的业务场景。

OBS_STORAGE_CLASS_DEEP_ARCHIVE

DEEP_ARCHIVE

深度归档存储

适用于长期不访问(平均几年访问一次)数据的业务场景。

表5 obs_protocol

常量名

原始值

说明

OBS_PROTOCOL_HTTPS

https

使用https协议访问。

OBS_PROTOCOL_HTTP

http

使用http协议访问。

表6 obs_bucket_type

常量名

原始值

说明

OBS_BUCKET_OBJECT

OBJECT

对象桶。

OBS_BUCKET_PFS

POSIX

并行文件系统。

表7 obs_bucket_list_type

常量名

原始值

说明

OBS_BUCKET_LIST_ALL

不发送头域

列举所有桶。

OBS_BUCKET_LIST_OBJECT

OBJECT

列举所有对象桶。

OBS_BUCKET_LIST_PFS

POSIX

列举所有并行文件系统

表8 obs_http_request_option

参数名称

参数类型

是否必选

描述

connect_time

int

必选

参数解释

建立HTTP/HTTPS连接的超时时间(单位:毫秒)。

约束限制:

取值范围:

[10000, 60000]

默认取值:

60000

max_connected_time

int

必选

参数解释

请求超时时间(单位:秒)。

约束限制:

取值范围:

默认取值:

0(指永远不会主动断开连接)

proxy_auth

char*

可选

参数解释

代理认证信息,格式为username:password。

约束限制:

取值范围:

默认取值:

proxy_host

char*

可选

参数解释

代理服务器的IP地址或主机名。

约束限制:

取值范围:

默认取值:

表9 temp_auth_configure

参数名称

参数类型

是否必选

描述

expires

long long int

必选

参数解释:

临时鉴权的有效期(单位:秒)。

约束限制:

取值范围:

[0-630720000]

默认取值

temp_auth_callback

void (*temp_auth_callback)(char *temp_auth_url,

uint64_t temp_auth_url_len,

char*temp_auth_headers,

uint64_t temp_auth_headers_len,

void*callback_data)

必选

参数解释:

用户自定义回调函数指针,用于将临时url以及涉及的计算签名头域记录到用户自定义回调数据中。

约束限制:

callback_data

void *

必选

参数解释:

用户自定义回调数据。

约束限制:

取值范围:

默认取值

表10 temp_auth_callback

参数名称

参数类型

是否必选

描述

temp_auth_url

char *

必选

参数解释:

临时鉴权的URL。OBS服务支持用户构造一个特定操作的URL,这个URL的Query参数中会包含用户AK、签名、有效期等信息,任何拿到这个URL的人均可执行临时鉴权操作,OBS服务收到这个请求后认为该请求就是签发URL用户自己在执行操作。例如构造一个携带签名信息的下载对象的URL,拿到相应URL的人都能下载这个对象,但该URL只在Expires指定的失效时间内有效。

约束限制:

取值范围:

默认取值

temp_auth_url_len

uint64_t

必选

参数解释:

临时鉴权的URL的长度。

约束限制:

取值范围:

默认取值

temp_auth_headers

char *

必选

参数解释:

临时鉴权的headers。

约束限制:

取值范围:

默认取值

temp_auth_headers_len

uint64_t

必选

参数解释:

临时鉴权headers的缓冲区长度(字节数)。

约束限制:

取值范围:

默认取值

callback_data

void *

必选

参数解释:

用户自定义回调数据。

约束限制:

取值范围:

默认取值

表11 obs_put_properties

参数名称

参数类型

是否必选

描述

content_type

char *

必选

参数解释:

指定对象被下载时的文件类型。

约束限制:

取值范围:

参见HTTP标准头域Content-Type的取值。

默认取值:

md5

char *

必选

参数解释:

对象数据的MD5值(经过Base64编码),提供给OBS服务端,校验数据完整性。OBS服务端会将该MD5值与对象数据计算出的MD5值进行对比,如果不匹配则上传失败,返回HTTP 400错误。

约束限制:

对象数据的MD5值必须经过Base64编码。如果不设置对象的MD5值,OBS服务端会忽略对对象数据的MD5值校验。

取值范围:

按照RFC 1864标准计算出消息体的MD5摘要字符串,即消息体128-bit MD5值经过Base64编码后得到的字符串。

示例:n58IG6hfM7vqI4K0vnWpog==

默认取值:

cache_control

char *

必选

参数解释:

指定对象被下载时的网页的缓存行为。

约束限制:

取值范围:

参见HTTP标准头域Cache-Control的取值。

默认取值:

content_disposition_filename

char *

必选

参数解释:

指定对象被下载时的名称。假设设置为test.txt则相当于添加了Content-Disposition: attachment; filename=test.txt头域

约束限制:

取值范围:

参见HTTP标准头域Content-Disposition的取值。

默认取值:

content_encoding

char *

必选

参数解释:

指定对象被下载时的内容编码格式。

约束限制:

取值范围:

参见HTTP标准头域Content-Encoding的取值。

默认取值:

website_redirect_location

char *

必选

参数解释:

当桶设置了Website配置,可以将获取这个对象的请求重定向到桶内另一个对象或一个外部的URL。

例如,重定向请求到桶内另一对象:

x-obs-website-redirect-location:/anotherPage.html

或重定向请求到一个外部URL:

x-obs-website-redirect-location:http://www.example.com/

约束限制:

必须以“/”、“http://”或“https://”开头,长度不超过2KB。

取值范围:

默认取值:

get_conditions

obs_get_conditions *

可选

参数解释:

指定复制对象时的一系列参数。

约束限制:

start_byte

uint64_t

可选

参数解释:

指定复制对象的起始位置。

约束限制:

取值范围:

[0~对象长度-1),单位:字节。

默认取值:

0(指从对象的第一个字节开始复制)

byte_count

uint64_t

可选

参数解释:

指定复制的长度。

约束限制:

取值范围:

  • 取值必须大于0。
  • 如果“start_byte+byte_count”大于对象长度-1,实际仍取对象长度-1,单位为字节。

默认取值:

upload_limit

uint64_t

可选

参数解释:

对单链接请求的带宽限制。

约束限制:

取值范围:

[819200,838860800],单位 bit/s。

默认取值:

expires

int64_t

可选

参数解释:

OBS请求中Expires头的值。指定Object被下载时的网页的缓存过期时间。

约束限制:

取值范围:

默认取值:

obs_expires

int64_t

可选

参数解释:

指定对象过期时间,单位是天。过期之后对象会被自动删除。

约束限制:

设置的天数计算出的过期时间不能早于当前时间,如10天前上传的对象,不能设置小于10的值。

取值范围:

大于0的整数值。

默认取值:

canned_acl

obs_canned_acl

可选

参数解释:

权限控制策略。

约束限制:

取值范围:

默认取值:

az_redundancy

obs_az_redundancy

可选

参数解释:

创桶时可指定的数据冗余类型,即AZ类型。

约束限制:

取值范围:

请详见obs_az_redundancy

默认取值:

meta_data_count

int

可选

参数解释:

meta_data数组中元素的个数。

约束限制:

取值范围:

默认取值:

meta_data

obs_name_value*

可选

参数解释:

对象的自定义元数据。OBS支持用户使用自定义的元数据,以便对对象进行自定义管理。当用户获取此对象或查询此对象元数据时,加入的自定义元数据将会在返回的消息头中出现。

约束限制

  • 如果请求携带了此头域,那么响应的消息中应该包含此消息头。
  • 所有自定义元数据大小的总和不超过8KB。单个自定义元数据大小的计算方式为:每个键和值的UTF-8 编码中的字节总数。
  • 自定义元数据的key值不区分大小写,OBS统一转为小写进行存储。value值区分大小写。
  • 自定义元数据key-value对都必须符合US-ASCII。如果一定要使用非ASCII码或不可识别字符,需要客户端自行做编解码处理,可以采用URL编码或者Base64编码,服务端不会做解码处理。例如x-obs-meta-中文:中文经URL编码后发送,“中文”的URL编码为:%E4%B8%AD%E6%96%87,则响应为x-obs-meta-%E4%B8%AD%E6%96%87: %E4%B8%AD%E6%96%87

metadata_action

metadata_action_indicator

可选

参数解释:

元数据操作指示符。

约束限制:

取值范围:

请详见metadata_action_indicator

默认取值:

server_callback

obs_upload_file_server_callback

可选

参数解释:

服务端回调相关参数。

约束限制:

表12 obs_get_conditions

参数名称

参数类型

是否必选

描述

start_byte

uint64_t

可选

参数解释:

指定下载对象的起始位置。

约束限制:

取值范围:

[0~对象长度-1),单位:字节。

默认取值:

0(指从对象的第一个字节开始下载)

byte_count

uint64_t

可选

参数解释:

指定下载的长度。

约束限制:

取值范围:

  • 取值必须大于0。
  • 如果“start_byte+byte_count”大于对象长度-1,实际仍取对象长度-1,单位为字节。

默认取值:

download_limit

uint64_t

可选

参数解释:

对单链接请求的带宽限制。

约束限制:

取值范围:

[819200,838860800],单位 bit/s。

默认取值:

if_modified_since

int64_t

可选

参数解释:

如果对象在指定的时间后有修改,则请求成功,否则返回错误。

约束限制:

取值范围:

默认取值:

if_not_modified_since

int64_t

可选

参数解释:

如果对象在指定的时间后没有修改,则请求成功,否则返回错误。

约束限制:

取值范围:

默认取值:

if_match_etag

char *

可选

参数解释:

指定一个预设的Etag值,如果下载或复制对象的ETag值与该参数值相同,则请求成功,否则返回错误。

约束限制:

取值范围:

长度为32的字符串。

默认取值:

if_not_match_etag

char *

可选

参数解释:

指定一个预设的Etag值,如果下载或复制对象的ETag值与该参数值不相同,则请求成功,否则返回错误。

约束限制:

取值范围:

长度为32的字符串。

默认取值:

image_process_config

image_process_configure *

可选

参数解释:

图片处理相关参数。

约束限制:

表13 obs_canned_acl

常量名

原始值

说明

OBS_CANNED_ACL_PRIVATE

private

私有读写,桶或对象的所有者拥有完全控制的权限,其他任何人都没有访问权限。

OBS_CANNED_ACL_PUBLIC_READ

public-read

公共读私有写,设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。设在对象上,所有人可以获取该对象内容和元数据。

OBS_CANNED_ACL_PUBLIC_READ_WRITE

public-read-write

公共读写,设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象删除对象、初始化段任务、上传段、合并段、复制段、取消多段上传任务。设在对象上,所有人可以获取该对象内容和元数据。

OBS_CANNED_ACL_BUCKET_OWNER_FULL_CONTROL

bucket-owner-full-control

设在对象上,桶和对象的所有者拥有对象的完全控制权限,其他任何人都没有访问权限。默认情况下,上传对象至其他用户的桶中,桶拥有者没有对象的控制权限。对象拥有者为桶拥有者添加此权限控制策略后,桶所有者可以完全控制对象。例如,用户A上传对象x至用户B的桶中,系统默认用户B没有对象x的控制权。当用户A为对象x设置bucket-owner-full-control策略后,用户B就拥有了对象x的控制权。仅S3 API支持。

OBS_CANNED_ACL_PUBLIC_READ_DELIVERED

public-read-delivered

桶公共读,桶内对象公共读,设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据,可以获取该桶内对象的内容和元数据。不能应用于对象。

OBS_CANNED_ACL_PUBLIC_READ_WRITE_DELIVERED

public-read-write-delivered

桶公共读写,桶内对象公共读写,设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、复制段、取消多段上传任务,可以获取该桶内对象的内容和元数据。不能应用于对象。

表14 obs_az_redundancy

常量名

原始值

说明

OBS_REDUNDANCY_1AZ

-

默认创建单AZ桶。

OBS_REDUNDANCY_3AZ

3az

创建3AZ桶。

表15 metadata_action_indicator

常量名

原始值

说明

OBS_NO_METADATA_ACTION

-

默认的无效值。

OBS_REPLACE

REPLACE

表示使用当前请求中携带的头域完整替换,未指定的元数据会被删除。

OBS_REPLACE_NEW

REPLACE_NEW

表示对于已经存在值的元数据进行替换,不存在值的元数据进行赋值,未指定的元数据保持不变(自定义元数据作替换处理)。

表16 obs_upload_file_server_callback

参数名称

参数类型

是否必选

描述

callback_url

char *

必选

参数解释:

对象上传成功之后,OBS向此url发送回调请求,请求方法为POST。

支持设置多个url,以英文分号(;)分隔,最多支持10个。

callbackUrl需要做url编码。例如:“http://www.example.com/中文?key=中文名”需要编码成“http://www.example.com/%E4%B8%AD%E6%96%87?key=%E4%B8%AD%E6%96%87%E5%90%8D”。

约束限制:

取值范围:

默认取值:

callback_host

char *

可选

参数解释:

发起回调请求的Host头域的值,如果不设置,会使用callbackUrl解析出来的Host。

约束限制:

取值范围:

默认取值:

callback_body

char *

必选

参数解释:

发起回调请求的body体。body体格式必须符合callbackBodyType中设置的媒体类型。

回调body体支持系统变量和自定义变量,系统变量如回调body体支持的系统变量表所示,自定义变量就是以x:开头的变量。例如:key=$(key)&hash=$(etag)&fileid=$(x:fileid),其中变量key、etag是系统变量,x:fileid是自定义变量。如果用户上传的对象是图片,可以在参数中设置imageInfo.width和imageInfo.height表示该图片的宽高。例如:key=$(key)&hash=$(etag)&w=$(imageInfo.width)&h=$(imageInfo.height)。

约束限制:

取值范围:

默认取值:

callback_body_type

char *

可选

参数解释:

发起回调请求的Content-Type头域的值。

约束限制:

取值范围:

  • application/x-www-form-urlencoded
  • application/json

默认取值:

如果不设置取值,则默认为application/json。

表17 image_process_configure

参数名称

参数类型

是否必选

描述

image_process_mode

image_process_mode_type

可选

参数解释:

图片处理参数头。

约束限制:

取值范围:

请详见image_process_mode_type

cmds_stylename

char *

可选

参数解释:

图片处理相关参数。

约束限制:

取值范围:

默认取值:

表18 image_process_mode_type

常量名

原始值

说明

obs_image_process_invalid_mode

-

默认的无效值。

obs_image_process_cmd

image

图片处理参数以image开头。

obs_image_process_style

style

图片处理参数以style开头。

表19 server_side_encryption_params

参数名称

参数类型

是否必选

描述

encryption_type

obs_encryption_type

可选

参数解释:

加密类型。

约束限制:

取值范围:

请详见obs_encryption_type

kms_server_side_encryption

char *

可选

参数解释:

使用该头域表示对象使用的服务端加密方式是SSE-KMS。

约束限制:

取值范围

  • kms
  • AES256

默认取值:

kms_key_id

char *

可选

参数解释:

密钥ID。当加密方式为SSE-KMS且使用指定密钥加密时,需输入密钥ID。

约束限制:

当您设置了kms_server_side_encryption且赋值为“kms”,即选择kms加密方式时,才能使用该头域指定加密密钥。

取值范围:

密钥ID获取方法请参见查看密钥

默认取值:

当您选择使用kms加密方式,但未设置此头域时,默认的主密钥将会被使用。如果默认主密钥不存在,系统将默认创建并使用。

ssec_customer_algorithm

char *

可选

参数解释:

该头域表示加密对象使用的算法。

约束限制:

仅SSE-C方式下使用该头域。

取值范围:

AES256(指AES256加密算法)

默认取值:

ssec_customer_key

char *

可选

参数解释:

该头域表示加密对象使用的密钥。

约束限制:

仅SSE-C方式下使用该头域。

取值范围:

256位密钥的base64编码。

默认取值:

des_ssec_customer_algorithm

char *

可选

参数解释:

该头域表示解密源对象使用的算法。

约束限制:

仅SSE-C方式下使用该头域。

取值范围:

默认取值:

des_ssec_customer_key

char *

可选

参数解释:

该头域表示解密源对象使用的密钥。

约束限制:

仅SSE-C方式下使用该头域。

取值范围:

默认取值:

表20 obs_encryption_type

常量名

原始值

说明

OBS_ENCRYPTION_KMS

kms

使用KMS加密方式。

OBS_ENCRYPTION_SSEC

AES256

使用SSE-C加密方式。

表21 obs_put_object_handler

参数名称

参数类型

是否必选

描述

response_handler

obs_response_handler *

必选

参数解释:

响应回调函数结构体。

约束限制:

put_object_data_callback

obs_put_object_data_callback *

必选

参数解释:

回调函数指针,用于把要上传的数据复制到待上传的数据缓冲区。

约束限制:

progress_callback

obs_progress_callback_internal *

必选

参数解释:

进度回调函数指针。

约束限制:

表22 obs_put_object_data_callback

参数名称

参数类型

是否必选

描述

buffer_size

int

必选

参数解释:

buffer的长度。

约束限制:

取值范围:

默认取值:

buffer

char *

必选

参数解释:

待上传的数据缓冲区,把要上传的数据复制到这个缓冲区。

约束限制:

取值范围:

默认取值:

callback_data

void *

必选

参数解释:

用户自定义回调数据指针。

约束限制:

取值范围:

默认取值:

表23 obs_progress_callback_internal

参数名称

参数类型

是否必选

描述

now

uint64_t

必选

参数解释:

已上传的字节数。

约束限制:

取值范围:

默认取值:

total

uint64_t

必选

参数解释:

总共需要上传的字节数。

约束限制:

取值范围:

默认取值:

callback_data

void *

必选

参数解释:

用户自定义回调数据指针。

约束限制:

取值范围:

默认取值:

表24 obs_response_handler

参数名称

参数类型

是否必选

描述

properties_callback

obs_response_properties_callback *

必选

参数解释:

请求失败的错误详情,包含错误消息、资源信息等,建议将其内容记录到callback_data(用户自定义回调数据)中。

约束限制:

complete_callback

obs_response_complete_callback *

必选

参数解释:

结束回调函数指针,可以在这个回调中把obs_statusobs_error_details的内容记录到callback_data(用户自定义回调数据)中。

约束限制:

表25 obs_response_properties_callback

参数名称

参数类型

是否必选

描述

properties

const obs_response_properties*

必选

参数解释:

响应头域中的参数,建议将其内容记录到callback_data(用户自定义回调数据)中。

约束限制:

callback_data

void *

必选

参数解释:

用户自定义回调数据指针。

约束限制:

取值范围:

默认取值

表26 obs_response_complete_callback

参数名称

参数类型

是否必选

描述

status

obs_status

必选

参数解释:

SDK内部的请求状态码。

约束限制:

取值范围:

请详见obs_status

error_details

const obs_error_details*

必选

参数解释:

请求失败的错误详情,包含错误消息、资源信息等,建议将其内容记录到callback_data(用户自定义回调数据)中。

约束限制:

callback_data

void *

必选

参数解释:

用户自定义回调数据指针。

约束限制:

取值范围:

默认取值

表27 obs_response_properties

参数名称

参数类型

是否必选

描述

request_id

const char *

可选

参数解释:

由OBS创建来唯一确定本次请求的值,可以通过该值来定位问题。

约束限制:

取值范围:

默认取值

request_id2

const char *

可选

参数解释:

帮助定位问题的特殊符号。

约束限制:

取值范围:

默认取值

content_type

const char *

可选

参数解释:

对象的文件类型(MIME类型)。Content-Type(MIME)用于标识发送或接收数据的类型,浏览器根据该参数来决定数据的打开方式。

约束限制:

取值范围:

默认取值

content_length

uint64_t

可选

参数解释:

响应消息体的字节长度。

约束限制:

取值范围:

默认取值

server

const char *

可选

参数解释:

HTTP请求中的Server头域。

约束限制:

取值范围:

默认取值

etag

const char *

可选

参数解释:

对象的base64编码的128位MD5摘要。ETag是对象内容的唯一标识,可以通过该值识别对象内容是否有变化。比如上传对象时ETag为A,下载对象时ETag为B,则说明对象内容发生了变化。ETag只反映变化的内容,而不是其元数据。上传的对象或复制操作创建的对象,都有唯一的ETag。

约束限制:

当对象是服务端加密的对象时,ETag值不是对象的MD5值。

取值范围:

长度为32的字符串。

默认取值:

expiration

const char *

可选

参数解释:

对象的详细过期信息。

约束限制:

取值范围:

大于0的整型数,单位:天。

默认取值:

website_redirect_location

const char *

可选

参数解释:

当桶设置了Website配置,就可以设置对象元数据的这个属性,Website接入点返回301重定向响应,将获取这个对象的请求重定向到该属性指定的桶内另一个对象或一个外部的URL,该参数指明对象的重定向地址。

例如,重定向请求到桶内另一对象:

x-obs-website-redirect-location:/anotherPage.html

或重定向请求到一个外部URL:

x-obs-website-redirect-location:http://www.example.com/

OBS将这个值从头域中取出,保存在对象的元数据“WebsiteRedirectLocation”中。

约束限制:

  • 必须以“/”、“http://”或“https://”开头,长度不超过2KB。
  • OBS仅支持为桶根目录下的对象设置重定向,不支持为桶中文件夹下的对象设置重定向。

默认取值:

version_id

const char *

可选

参数解释:

对象的版本号。如果该对象无版本号,则为NULL。

约束限制:

取值范围:

长度为32的字符串。

默认取值

meta_data_count

int

可选

参数解释:

meta_data数组中的元素个数。

约束限制:

取值范围:

默认取值:

meta_data

const obs_name_value *

可选

参数解释:

对象的自定义元数据。OBS支持用户使用以“x-obs-meta-”开头的消息头来加入自定义的元数据,以便对对象进行自定义管理。当用户获取此对象或查询此对象元数据时,加入的自定义元数据将会在返回的消息头中出现。

约束限制:

use_server_side_encryption

char

可选

参数解释:

如果开启了服务端加密,会被置为'\1'。

约束限制:

取值范围:

默认取值:

allow_origin

const char *

可选

参数解释:

当桶设置了CORS配置,如果请求中的Origin满足服务端的CORS配置,则在响应中包含这个Origin。

约束限制:

取值范围:

符合CORS协议的取值范围。

默认取值:

allow_headers

const char *

可选

参数解释:

当桶设置了CORS配置,如果请求的headers满足服务端的CORS配置,则在响应中包含这个headers。

约束限制:

最多可填写一个“*”通配符,不支持&、:、<、空格以及中文字符。

取值范围:

符合CORS协议的取值范围。

默认取值:

max_age

const char *

可选

参数解释:

桶CORS规则中的MaxAgeSeconds。MaxAgeSeconds指请求来源的客户端可以对跨域请求返回结果的缓存时间。

约束限制:

每个CORSRule可以包含至多一个MaxAgeSeconds。

取值范围:

大于等于0的整型数,单位:秒。

默认取值:

3000

allow_methods

const char *

可选

参数解释:

当桶设置了CORS配置,如果请求的Access-Control-Request-Method满足服务端的CORS配置,则在响应中包含这条rule中的Methods。

约束限制:

取值范围:

  • GET
  • PUT
  • HEAD
  • POST
  • DELETE

默认取值:

expose_headers

const char *

可选

参数解释:

桶CORS规则中的ExposeHeader。ExposeHeader是指CORS规则允许响应中可返回的附加头域,给客户端提供额外的信息。默认情况下浏览器只能访问以下头域:Content-Length、Content-Type,如果需要访问其他头域,需要在附加头域中配置。

约束限制:

不支持*、&、:、<、空格以及中文字符。

取值范围:

默认取值:

storage_class

const char *

可选

参数解释:

对象的存储类别。

约束限制:

仅当对象为非标准存储类别时,会返回此头域。

取值范围:

  • WARM(指低频存储)
  • COLD(指归档存储)
  • DEEP_ARCHIVE(指深度归档存储)

默认取值:

server_side_encryption

const char *

可选

参数解释:

该头域表示服务端的加密方式。

示例:x-obs-server-side-encryption:kms

约束限制:

如果服务端加密是SSE-KMS方式,响应包含该头域。

取值范围:

  • kms(指SSE-KMS加密方式)
  • obs(指SSE-OBS加密方式)

默认取值:

kms_key_id

const char *

可选

参数解释:

密钥ID。当加密方式为SSE-KMS且使用指定密钥加密时,需输入密钥ID。

约束限制:

当您设置了server_side_encryption且赋值为“kms”,即选择kms加密方式时,才能使用该头域指定加密密钥。

取值范围:

密钥ID获取方法请参见查看密钥

默认取值:

当您选择使用kms加密方式,但未设置此头域时,默认的主密钥将会被使用。如果默认主密钥不存在,系统将默认创建并使用。

customer_algorithm

const char *

可选

参数解释:

如果服务端加密是SSE-C方式,响应包含该头域,该头域表示解密使用的算法。

约束限制:

取值范围:

AES256(指AES256解密算法)

默认取值:

customer_key_md5

const char *

可选

参数解释:

如果服务端加密是SSE-C方式,响应包含该头域,该头域表示解密使用的密钥的MD5值。

约束限制:

由密钥值经过MD5加密再经过Base64编码后得到,示例:4XvB3tbNTN+tIEVa0/fGaQ==。

取值范围:

密钥ID MD5的base64值。

默认取值:

bucket_location

const char *

可选

参数解释:

桶的区域位置信息。

约束限制:

取值范围:

默认取值:

obs_version

const char *

可选

参数解释:

桶所在的OBS服务版本号。

约束限制:

取值范围:

  • 3.0:最新版本的桶。
  • --:表示老版本的桶。

默认取值:

restore

const char *

可选

参数解释:

标识对象的恢复状态。

示例:正在恢复ongoing-request="true";已恢复 ongoing-request="false", expiry-date="Wed, 7 Nov 2012 00:00:00 GMT"。其中expiry-date表示对象恢复后的失效时间。

约束限制:

仅当对象为归档存储或深度归档存储类别,并且处于正在恢复或已经恢复时,会返回此头域。

取值范围:

默认取值:

obs_object_type

const char *

可选

参数解释:

对象的类型。

约束限制:

仅当对象为非Normal对象时,会返回此头域。

取值范围:

Appendable

默认取值:

obs_next_append_position

const char *

可选

参数解释:

指明下一次请求应该提供的position。

约束限制:

仅当对象为Appendable对象时,会返回此头域。

取值范围:

默认取值:

obs_head_epid

const char *

可选

参数解释:

当前桶的企业项目ID,开通企业项目的用户可以从企业项目服务获取。

约束限制:

格式为uuid,未开通企业项目的用户可以不带该头域。

取值范围:

默认取值:

reserved_indicator

const char *

可选

参数解释:

帮助定位问题的特殊符号。

约束限制:

取值范围:

默认取值:

表28 obs_error_details

参数名称

参数类型

描述

message

const char*

参数解释:

错误响应消息体XML中具体错误更全面、详细的英文解释。

约束限制:

取值范围:

取值范围可参见错误码

默认取值:

resource

const char*

参数解释:

该错误相关的桶或对象资源。

约束限制:

取值范围:

默认取值:

further_details

const char*

参数解释:

错误响应消息体XML中的FurtherDetails元素的值。

约束限制:

取值范围:

默认取值:

extra_details_count

int

参数解释:

错误响应消息体XML中的其他元素的数量。

约束限制:

取值范围:

默认取值:

extra_details

obs_name_value*

参数解释:

错误响应消息体XML中的其他元素的值。

约束限制:

error_headers_count

int

参数解释:

error_headers的头域数量。

约束限制:

取值范围:

默认取值:

error_headers

char**

参数解释:

响应头域中包含error的所有头域。

约束限制:

取值范围:

默认取值:

表29 obs_name_value

参数名称

参数类型

是否必选

描述

name

char *

可选

参数解释:

属性的键。

约束限制:

取值范围:

默认取值:

value

char *

可选

参数解释:

属性的值。

约束限制:

取值范围:

默认取值:

表30 obs_status

常量名

原始值

说明

OBS_STATUS_OK

0

请求成功。

OBS_STATUS_InitCurlFailed

1

初始化curl失败。

OBS_STATUS_InternalError

2

内部错误。

OBS_STATUS_OutOfMemory

3

本地环境内存不足。

OBS_STATUS_FailedToIInitializeRequest

6

初始化请求失败。

OBS_STATUS_XmlParseFailure

23

xml解析失败。

OBS_STATUS_NameLookupError

33

域名解析失败。

OBS_STATUS_FailedToConnect

34

无法连接到服务端。

OBS_STATUS_ConnectionFailed

36

网络连接失败。

OBS_STATUS_PartialFile

38

网络传输中断。

OBS_STATUS_InvalidParameter

39

参数非法。

OBS_STATUS_NoToken

40

当前并发数已经超过最大并发数(默认值1000)。此处的Token指并发请求令牌,非安全认证令牌。可通过set_online_request_max_count函数调整最大并发数。

OBS_STATUS_OpenFileFailed

41

打开文件失败。

OBS_STATUS_AccessDenied

43

请求被拒绝。

OBS_STATUS_MalformedPolicy

44

请求policy格式不正确。

OBS_STATUS_MalformedXML

45

请求xml格式不正确。

OBS_STATUS_MethodNotAllowed

46

请求方法不允许。

OBS_STATUS_SignatureDoesNotMatch

47

签名不匹配,检查ak、sk、token是否对应或有误。

OBS_STATUS_ServiceUnavailable

48

服务端异常。

OBS_STATUS_SlowDown

49

请求频率过快。

代码示例:设置多版本对象ACL

ACL中需要填写的所有者(Owner)或者被授权用户(Grantee)的ID,是指用户的账号ID,可通过OBS控制台“我的凭证”页面查看。

相关文档