云服务器内容精选

  • 计费示例 以下示例中出现的费用价格仅供参考,实际价格请参见产品价格详情中“ 对象存储服务 ”的内容。 假设某用户于2023年7月1日上传了一个10GB低频存储单AZ类型的数据至华北-北京四的 OBS 存储桶,产生了100次请求,第2天08:00-24:00(忙时)读取该数据,产生了100次请求,其余时间无其他操作。 账单是按小时进行结算。 低频存储容量费用:在2023年7月1日0时开始结算。 低频存储数据取回费用:在2023年7月2日结算。 低频存储请求费用:在2023年7月1、2日结算。 公网流出流量费用:在2023年7月2日结算。 由于数据取回费用无适用的资源包,则按照按需计费方式分析如下: 按量计费: 低频存储容量费用 = (0.08元/GB/月 /30天/24小时) * 10GB * 48小时 = 0.053元 低频存储数据恢复费用 = 0.0325元/GB * 10GB = 0.325元 低频存储请求费用 = 0.05元/万次 * (100次/10000次) * 2 = 0.001元 公网流出流量费用 = 0.5元/GB * 10GB = 5元(忙时费用) 综合上面分析得出,整个7月用户 B 总花费0.053元 + 0.325元 + 0.001元 + 5元 = 5.379元。
  • 计费说明 资费项 计费项 含义 适用的计费模式 数据恢复费用 数据读取流量 访问低频访问存储类别的对象时,会根据对象大小产生额外的数据恢复费用。 访问归档存储类别的对象时,会根据对象大小和设置的恢复速度级别产生额外的数据恢复费用。 访问深度归档存储类别的对象时,会根据对象大小和设置的恢复速度级别产生额外的数据恢复费用。 此项费用不管通过内、外网访问均会产生;如果使用外网访问,则会同时计入到公网流出流量费用。 归档存储数据恢复后,会产生一个标准存储类别的对象副本,在恢复的有效期内,会同时收取这份数据在标准存储和归档存储中的存储费用,有效期到期后副本自动删除。其中,标准存储类别对象副本在整个有效期内的存储费用会在恢复时一次性扣除,扣除方式可以按需,也可以从资源包中抵扣。 低频访问存储数据恢复和归档存储直读功能不产生对象副本,不会产生标准存储的存储费用。 开启归档数据直读后,下载和拷贝归档存储对象均会产生数据读取流量。 说明: 重复恢复归档存储数据时,分为以下两种情况: 延长有效期:在延长恢复有效期的同时,也将会对恢复时产生的恢复费用进行重复收取。产生的标准存储类别的对象副本有效期将会延长,并且收取延长时间段产生的标准存储副本费用。 例如:您在昨天执行了一次恢复操作,有效期设置为7天,在今天同一时间又执行了一次恢复操作,有效期设置为8天,那么该归档存储对象的有效期为8天,收取的费用包含:两次恢复的费用,以及一个标准存储对象副本9天的费用。 缩短有效期:将会报错,错误码为409 ObjectHasAlreadyRestored。将不会产生恢复费用,也不会新增标准存储类别的对象副本的存储费用。 按需计费
  • Go SDK接口概览 表1总结了Go SDK支持的接口及功能描述,每个接口的详细介绍和示例代码请前往接口详情页查看。 表1 Go SDK API 接口名 方法 功能描述 创建桶 obsClient.CreateBucket 创建桶。 获取桶列表 obsClient.ListBuckets 查询桶列表,返回结果按照桶名字典序排列。 判断桶是否存在 obsClient.HeadBucket 判断桶是否存在。 删除桶 obsClient.DeleteBucket 删除桶,待删除的桶必须为空。 列举桶内对象 obsClient.ListObjects 列举桶内对象,默认返回最大1000个对象。 列举桶内多版本对象 obsClient.ListVersions 列举桶内多版本对象,默认返回最大1000个多版本对象。 获取桶元数据 obsClient.GetBucketMetadata 对桶发送HEAD请求,获取桶的元数据信息。 获取桶区域位置 obsClient.GetBucketLocation 获取桶所在的区域位置。 获取桶存量信息 obsClient.GetBucketStorageInfo 获取桶的存量信息,包含桶的空间大小以及对象个数。 设置桶配额 obsClient.SetBucketQuota 设置桶的配额值,单位为字节,支持的最大值为263-1,配额值设为0表示桶的配额没有上限。 获取桶配额 obsClient.GetBucketQuota 获取桶的配额值,0代表配额没有上限。 设置桶存储类型 obsClient.SetBucketStoragePolicy 设置桶的存储类型,桶中对象的存储类型默认将与桶的存储类型保持一致。 获取桶存储类型 obsClient.GetBucketStoragePolicy 获取桶的存储类型。 设置桶ACL obsClient.SetBucketAcl 设置桶的访问权限。 获取桶ACL obsClient.GetBucketAcl 获取桶的访问权限。 设置桶日志管理配置 obsClient.SetBucketLoggingConfiguration 设置桶的访问日志配置。 获取桶日志管理配置 obsClient.GetBucketLoggingConfiguration 获取桶的访问日志配置。 设置桶策略 obsClient.SetBucketPolicy 配置桶的策略,如果桶已存在策略,那么当前请求中的策略将完全覆盖桶中现存的策略。 获取桶策略 obsClient.GetBucketPolicy 获取桶的策略配置。 删除桶策略 obsClient.DeleteBucketPolicy 删除桶的策略配置。 设置桶的生命周期配置 obsClient.SetBucketLifecycleConfiguration 配置桶的生命周期规则,实现定时转换桶中对象的存储类型,以及定时删除桶中对象的功能。 获取桶的生命周期配置 obsClient.GetBucketLifecycleConfiguration 获取桶的生命周期规则。 删除桶的生命周期配置 obsClient.DeleteBucketLifecycleConfiguration 删除桶所有的生命周期规则。 设置桶的网站配置 obsClient.SetBucketWebsiteConfiguration 调用设置桶的网站配置接口,您可以为指定桶设置网站配置信息。 获取桶的网站配置 obsClient.GetBucketWebsiteConfiguration 调用获取桶的网站配置接口,您可以获取指定桶的网站配置信息。 删除桶的网站配置 obsClient.DeleteBucketWebsiteConfiguration 调用删除桶的网站配置接口,您可以删除指定桶的网站配置。 设置桶的多版本状态 obsClient.SetBucketVersioning 设置桶的多版本状态。 获取桶的多版本状态 obsClient.GetBucketVersioning 获取桶的多版本状态。 设置桶的CORS 配置 obsClient.SetBucketCors 设置桶的跨域资源共享规则,以允许客户端浏览器进行跨域请求。 获取桶的CORS 配置 obsClient.GetBucketCors 获取指定桶的跨域资源共享规则。 删除桶的CORS 配置 obsClient.DeleteBucketCors 删除指定桶的跨域资源共享规则。 设置桶标签 obsClient.SetBucketTagging 设置指定桶的标签。 获取桶标签 obsClient.GetBucketTagging 获取指定桶的标签。 删除桶标签 obsClient.DeleteBucketTagging 删除指定桶的标签。 上传对象 obsClient.PutObject 上传对象到指定桶中。 上传文件 obsClient.PutFile 上传文件/文件夹到指定桶中。 下载对象 obsClient.GetObject 下载指定桶中的对象。 复制对象 obsClient.CopyObject 为指定桶中的对象创建一个副本。 删除对象 obsClient.DeleteObject 删除指定桶中的单个对象。 批量删除对象 obsClient.DeleteObjects 批量删除指定桶中的多个对象。 获取对象元数据 obsClient.GetObjectMetadata 对指定桶中的对象发送HEAD请求,获取对象的元数据信息。 设置对象元数据 obsClient.SetObjectMetadata 设置指定桶中的对象的元数据信息。 设置对象ACL obsClient.SetObjectAcl 设置指定桶中对象的ACL访问权限。 获取对象ACL obsClient.GetObjectAcl 获取指定桶中对象的ACL访问权限。 初始化分传段任务 obsClient.InitiateMultipartUpload 在指定桶中初始化分段上传任务。 上传段 obsClient.UploadPart 初始化分段上传任务后,通过分段上传任务的ID,上传段到指定桶中。 复制段 obsClient.CopyPart 初始化分段上传任务后,通过分段上传任务的ID,复制段到指定桶中。 列举已上传的段 obsClient.ListParts 通过分段上传任务的ID,列举指定桶中已上传的段。 列举分段上传任务 obsClient.ListMultipartUploads 列举指定桶中所有的初始化后还未合并或还未取消的分段上传任务。 合并段 obsClient.CompleteMultipartUpload 通过分段上传任务的ID和对应已上传的段信息(包括PartNumber和ETag),合并成一个完整的对象。 取消分段上传任务 obsClient.AbortMultipartUpload 通过分段上传任务的ID,取消指定桶中的分段上传任务。 恢复归档存储对象 obsClient.RestoreObject 恢复指定桶中的归档存储对象。 生成带授权信息的URL obsClient.CreateSignedUrl 通过访问密钥、请求方法类型、请求参数等信息生成一个在Query参数中携带鉴权信息的URL,以对OBS服务进行特定操作。 生成带授权信息的表单上传参数 obsClient.CreateBrowserBasedSignature 生成用于鉴权的请求参数,以进行POST表单上传。 断点续传上传 obsClient.UploadFile 对分段上传的封装和加强,解决上传大文件时由于网络不稳定或程序崩溃导致上传失败的问题。 断点续传下载 obsClient.DownloadFile 对分段下载的封装和加强,解决下载大对象到本地时由于网络不稳定或程序崩溃导致下载失败的问题。
  • 创建桶 桶是OBS全局命名空间,相当于数据的容器、文件系统的根目录,可以存储若干对象。 本示例用于创建名为examplebucket的桶,并设置所在区域在华北-北京四(cn-north-4),桶的权限访问控制策略是私有桶,存储类型是低频访问存储,多AZ方式存储。 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 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 // securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint/*, obs.WithSecurityToken(securityToken)*/) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.CreateBucketInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定存储桶所在区域,此处以“cn-north-4”为例,必须跟传入的Endpoint中Region保持一致。 input.Location = "cn-north-4" // 指定存储桶的权限控制策略,此处以obs.AclPrivate为例。 input.ACL = obs.AclPrivate // 指定存储桶的存储类型,此处以obs.StorageClassWarm为例。如果未指定该参数,则创建的桶为标准存储类型。 input.StorageClass = obs.StorageClassWarm // 指定存储桶的AZ类型,此处以“3AZ”为例。不携带时默认为单AZ,如果对应region不支持多AZ存储,则该桶的存储类型仍为单AZ。 input.AvailableZone = "3az" // 创建桶 output, err := obsClient.CreateBucket(input) if err == nil { fmt.Printf("Create bucket:%s successful!\n", input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Create bucket:%s fail!\n", input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } } 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 更多创建桶的信息,请参见创建桶。 创建桶时,如果使用的终端节点归属于默认区域华北-北京一(cn-north-1),则可以不指定区域;如果使用的终端节点归属于其他区域,则必须指定区域(指定方法参见带参数创建),且指定的区域必须与终端节点归属的区域一致。当前有效的区 域名 称可从这里查询。
  • 上传对象 完成桶创建后,您可以往桶中上传对象。 本示例用于将本地localfile文件上传到examplebucket桶中的example/objectname对象。 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 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.PutFileInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定上传对象,此处以 example/objectname 为例。 input.Key = "example/objectname" // 指定本地文件,此处以localfile为例 input.SourceFile = "localfile" // 文件上传 output, err := obsClient.PutFile(input) if err == nil { fmt.Printf("Put file(%s) under the bucket(%s) successful!\n", input.Key, input.Bucket) fmt.Printf("StorageClass:%s, ETag:%s\n", output.StorageClass, output.ETag) return } fmt.Printf("Put file(%s) under the bucket(%s) fail!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } } 更多上传对象的信息,请参见上传对象。
  • 初始化OBS客户端 向OBS发送任一HTTP/HTTPS请求之前,必须先创建一个ObsClient结构体: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 // 引入依赖包 import ( obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 // securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSignature(obs.SignatureObs)/*, obs.WithSecurityToken(securityToken)*/) if err == nil { // 使用访问OBS // 关闭obsClient obsClient.Close() } } 更多关于OBS客户端初始化的内容请参考“初始化”章节。 日志配置详见日志初始化。 如果设置的endpoint不带协议类型,则默认使用HTTPS协议。 出于DNS解析性能和OBS服务可靠性的考虑,不允许将endpoint设置为IP,必须使用域名访问OBS服务。
  • 公网环境下如何提高上传大文件速度?(Python SDK) 在公网环境下对于超过100MB的大文件建议通过分段上传方式上传。 分段上传是将单个对象拆分为一系列段分别上传。每个段都是对象数据的连续部分。您可以按照任意顺序上传段。如果其中某个段传输失败,可以重新传输该段且不会影响其他段。通过多线程并发上传同一对象的多个段,可大大提高传输效率。 具体代码样例可参见多段相关接口(Python SDK)。 父主题: 常见问题(Python SDK)
  • 初始化OBS客户端 向OBS发送任一HTTP/HTTPS请求之前,必须先创建一个ObsClient实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 引入模块 from obs import ObsClient # 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 # 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak = os.getenv("AccessKeyID") sk = os.getenv("SecretAccessKey") # 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取 security_token = os.getenv("SecurityToken") # server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 server = "https://obs.cn-north-4.myhuaweicloud.com" # 创建obsClient实例 # 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值 obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server) # 使用访问OBS # 关闭obsClient obsClient.close() 更多关于OBS客户端初始化的内容请参考“初始化”章节。 日志配置详见日志初始化
  • 创建AK、SK OBS通过用户账户中的AK和SK进行签名验证,确保通过授权的账户才能访问指定的OBS资源。以下是对AK和SK的解释说明: AK:Access Key ID,接入键标识,用户在对象存储服务系统中的接入键标识,一个接入键标识唯一对应一个用户,一个用户可以同时拥有多个接入键标识。对象存储服务系统通过接入键标识识别访问系统的用户。 SK:Secret Access Key,安全接入键,用户在对象存储服务系统中的安全接入键,是用户访问对象存储服务系统的密钥,用户根据安全接入键和请求头域生成鉴权信息。安全接入键和接入键标识一一对应。 访问密钥分永久访问密钥(AK/SK)和临时访问密钥(AK/SK和SecurityToken)两种。每个用户最多可创建两个有效的永久访问密钥。临时访问密钥只在设置的有效期内能够访问OBS,过期后需要重新获取。出于安全性考虑,建议您使用临时访问密钥访问OBS,或使用永久访问密钥访问OBS时,定期更新您的访问密钥(AK/SK)。两种密钥的获取方式如下所示。 永久访问密钥: 登录管理控制台。 单击页面右上角的用户名,并选择“我的凭证”。 在“我的凭证”页面,单击左侧导航栏的“访问密钥”。 在“访问密钥”页面,单击“新增访问密钥”。 每个用户最多可创建两个有效的访问密钥。 在弹出的“新增访问密钥”对话框中,输入描述内容(建议),单击“确定”。 (可选)在弹出的“身份验证”对话框中,选择合适的验证方式进行验证,单击“确定”。 在弹出的“创建成功”提示框中,单击“立即下载”后,密钥会直接保存到浏览器默认的下载文件夹中。 打开下载下来的“credentials.csv”文件即可获取到访问密钥(AK和SK)。 在密钥文件中,Access Key ID列对应的值即AK,Secret Access Key列对应的值即SK。 为防止访问密钥泄露,建议您将其保存到安全的位置。如果用户在此提示框中单击“取消”,则不会下载密钥,后续也将无法重新下载。如果需要使用访问密钥,可以重新创建新的访问密钥。
  • 其他使用前须知 请确认您已经熟悉OBS的基本概念,如桶(Bucket)、对象(Object)、访问密钥(AK和SK)、终端节点(Endpoint)和访问域名等。 当前各区域特性开放不一致,部分特性只在部分区域开放,使用过程中如果接口HTTP状态码为405,请确认该区域是否支持该功能特性。 命名空间:与旧版本(2.1.x)不兼容,所有模块都调整到obs包下。 接口函数:与旧版本(2.1.x)保持兼容。
  • 返回结果 表10 返回结果 类型 说明 GetResult 参数解释: SDK公共结果对象。 表11 GetResult 参数名称 参数类型 描述 status int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 reason str 参数解释: HTTP文本描述。 默认取值: 无 errorCode str 参数解释: OBS服务端错误码,当status参数小于300时为空。 默认取值: 无 errorMessage str 参数解释: OBS服务端错误描述,当status参数小于300时为空。 默认取值: 无 requestId str 参数解释: OBS服务端返回的请求ID。 默认取值: 无 indicator str 参数解释: OBS服务端返回的错误定位码。 默认取值: 无 hostId str 参数解释: 请求的服务端ID,当status参数小于300时为空。 默认取值: 无 resource str 参数解释: 发生错误时相关的桶或对象,当status参数小于300时为空。 默认取值: 无 header list 参数解释: 响应消息头列表,由多个元组构成。每个元组均包含两个元素,代表响应头的键值对。 默认取值: 无 body object 参数解释: 操作成功后的结果数据,当status大于300时为空。该值根据调用接口的不同而不同,参见“桶相关接口”章节和“对象相关接口”章节的详细描述。 默认取值: 无 表12 GetResult.body GetResult.body类型 说明 CopyObjectResponse 参数解释: 复制对象响应结果。 表13 CopyObjectResponse 参数名称 参数类型 描述 lastModified str 参数解释: 目标对象的最近一次修改时间(UTC时间)。 取值范围: UTC时间 默认取值: 无 etag str 参数解释: 目标对象的ETag值。对象的base64编码的128位MD5摘要。ETag是对象内容的唯一标识,可以通过该值识别对象内容是否有变化。比如上传对象时ETag为A,下载对象时ETag为B,则说明对象内容发生了变化。ETag只反映变化的内容,而不是其元数据。上传的对象或拷贝操作创建的对象,都有唯一的ETag。 约束限制: 当对象是服务端加密的对象时,ETag值不是对象的MD5值。 取值范围: 长度为32的字符串。 默认取值: 无 copySourceVersionId str 参数解释: 源对象的版本号。 取值范围: 长度为32的字符串。 默认取值: 无 versionId str 参数解释: 目标对象的版本号。 取值范围: 长度为32的字符串。 默认取值: 无 sseKms str 参数解释: 表示服务端加密是SSE-KMS方式。对象使用SSE-KMS方式加密。 取值范围: 可选值:kms,即选择SSE-KMS方式加密对象。 默认取值: 无 sseKmsKey str 参数解释: SSE-KMS加密方式下使用的KMS主密钥的ID值。 取值范围: 有效值支持两种格式: regionID:domainID(账号ID):key/key_id key_id 其中: regionID是使用密钥所属region的ID,可在地区和终端节点页面获取; domainID是使用密钥所属账号的账号ID,获取方法参见如何获取账号ID和用户ID?(Python SDK); key_id是从 数据加密 服务创建的密钥ID,获取方法请参见查看密钥。 默认取值: 如果用户没有提供该头域,那么默认的主密钥将会被使用。 如果默认主密钥不存在,将默认创建并使用。 sseC str 参数解释: 使用SSE-C方式加解密对象时,选择的加解密算法。 取值范围: 支持的值为AES256,即高级加密标准(Advanced Encryption Standard,AES)。 默认取值: 无 sseCKeyMd5 str 参数解释: SSE-C方式下加密使用密钥的MD5值,该值用于验证密钥传输过程中是否出错。 约束限制: 由密钥值经过MD5加密再经过Base64编码后得到,示例:4XvB3tbNTN+tIEVa0/fGaQ== 默认取值: 无
  • 接口约束 您必须是桶拥有者或拥有复制对象的权限,才能复制对象。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。 复制对象操作的请求需要通过头域携带拷贝的源桶和对象信息,不能携带消息实体。 目标对象大小范围是[0, 5GB],如果源对象大小超过5GB,只能使用多段相关接口(Python SDK)功能拷贝部分对象。
  • 代码样例 此用例用于生成带授权信息的临时URL。 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 from obs import ObsClient import os import traceback import base64 # 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 # 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak = os.getenv("AccessKeyID") sk = os.getenv("SecretAccessKey") # 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取 # security_token = os.getenv("SecurityToken") # server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 server = "https://obs.cn-north-4.myhuaweicloud.com" # 创建obsClient实例 # 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值 obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server) try: # 生成创建桶的带授权信息的URL res1 = obsClient.createSignedUrl(method='PUT', bucketName='bucketname', expires=3600) print('signedUrl:', res1.signedUrl) print('actualSignedRequestHeaders:', res1.actualSignedRequestHeaders) # 生成上传对象的带授权信息的URL res2 = obsClient.createSignedUrl(method='PUT', bucketName='bucketname', objectKey='objectkey', expires=3600, headers={'Content-Type': 'text/plain'}) print('signedUrl:', res2.signedUrl) print('actualSignedRequestHeaders:', res2.actualSignedRequestHeaders) # 生成设置对象ACL的带授权信息的URL res3 = obsClient.createSignedUrl(method='PUT', bucketName='bucketname', objectKey='objectkey', specialParam='acl', expires=3600, headers={'x-obs-acl': 'private'}) print('signedUrl:', res3.signedUrl) print('actualSignedRequestHeaders:', res3.actualSignedRequestHeaders) # 生成下载对象的带授权信息的URL res4 = obsClient.createSignedUrl(method='GET', bucketName='bucketname', objectKey='objectkey', expires=3600) print('signedUrl:', res4.signedUrl) print('actualSignedRequestHeaders:', res4.actualSignedRequestHeaders) # 生成删除对象的带授权信息的URL res5 = obsClient.createSignedUrl(method='DELETE', bucketName='bucketname', objectKey='objectkey', expires=3600) print('signedUrl:', res5.signedUrl) print('actualSignedRequestHeaders:', res5.actualSignedRequestHeaders) # 生成删除桶的带授权信息的URL res6 = obsClient.createSignedUrl(method='DELETE', bucketName='bucketname', expires=3600) print('signedUrl:', res6.signedUrl) print('actualSignedRequestHeaders:', res6.actualSignedRequestHeaders) # 生成设置初始化分段任务的带授权信息的URL res7 = obsClient.createSignedUrl(method='POST', bucketName='bucketname', objectKey='objectkey', specialParam='uploads', expires=3600) print('signedUrl:', res7.signedUrl) print('actualSignedRequestHeaders:', res7.actualSignedRequestHeaders) # 生成上传段的带授权信息的URL, res8 = obsClient.createSignedUrl(method='PUT', bucketName='bucketname', objectKey='objectkey', expires=3600, queryParams={'partNumber': '1', 'uploadId': '00000*****'}) print('signedUrl:', res8.signedUrl) print('actualSignedRequestHeaders:', res8.actualSignedRequestHeaders) # 生成合并段的带授权信息的URL res9 = obsClient.createSignedUrl(method='POST', bucketName='bucketname', objectKey='objectkey', expires=3600, queryParams={'uploadId': '00000*****'}) print('signedUrl:', res9.signedUrl) print('actualSignedRequestHeaders:', res9.actualSignedRequestHeaders) # 生成图片持久化处理的带授权信息的URL # 源对象所在的桶名 bucketName = 'originBucketName'; # 处理前的源对象名 objectKey = 'test.png'; # 处理后的对象名 targetObjectName ="save.png" # 处理后保存的桶名, 可选参数 targetBucketName ="saveBucketName" queryParams={} queryParams["x-image-process"]="image/resize,w_100" queryParams["x-image-save-object"]=base64.b64encode(targetObjectName .encode("utf-8")).decode() # 可选参数 queryParams["x-image-save-bucket"]=base64.b64encode(targetBucketName .encode("utf-8")).decode() res10 = obsClient.createSignedUrl(method='GET', bucketName=bucketName, objectKey=objectKey, queryParams=queryParams, expires=3600) print('signedUrl:', res10.signedUrl) print('actualSignedRequestHeaders:', res10.actualSignedRequestHeaders) except: print(traceback.format_exc())
  • 接口约束 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。 如果遇到跨域报错、签名不匹配问题,请参考以下步骤排查问题: 未配置跨域,需要在控制台配置CORS规则,请参考配置桶允许跨域请求。 签名计算问题,请参考URL中携带签名排查签名参数是否正确;比如上传对象功能,后端将Content-Type参与计算签名生成授权URL,但是前端使用授权URL时没有设置Content-Type字段或者传入错误的值,此时会出现跨域错误。解决方案为:Content-Type字段前后端保持一致。
  • 请求参数 表1 请求参数列表 参数名称 参数类型 是否必选 描述 method str 必选 参数解释: HTTP方法类型 取值范围: GET POST PUT DELETE HEAD 默认取值: 无 bucketName str 可选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 objectKey str 可选 参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 specialParam str 可选 参数解释: 特殊操作符,代表要操作的子资源, 取值范围: versions uploads location storageinfo quota storagePolicy acl append logging policy lifecycle website versioning cors notification tagging delete restore 默认取值: 无 expires int 可选 参数解释: 带授权信息的URL的过期时间。 取值范围: 大于等于0的整型数,单位:秒。 默认取值: 300秒 headers dict 可选 参数解释: 请求中携带的头域。 默认取值: 无 queryParams dict 可选 参数解释: 请求中携带的查询参数。 默认取值: 无 如果遇到跨域报错、签名不匹配问题,请参考以下步骤排查问题: 未配置跨域,需要在控制台配置CORS规则,请参考配置桶允许跨域请求。 签名计算问题,请参考URL中携带签名排查签名参数是否正确;比如上传对象功能,后端将Content-Type参与计算签名生成授权URL,但是前端使用授权URL时没有设置Content-Type字段或者传入错误的值,此时会出现跨域错误。解决方案为:Content-Type字段前后端保持一致。