云服务器内容精选
-
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 对分段下载的封装和加强,解决下载大对象到本地时由于网络不稳定或程序崩溃导致下载失败的问题。
-
代码示例 本示例用于将examplebucket并行文件系统中的folderName/originalObjectName对象重命名为newFolderName/newObjectName。 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 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.RenameFileInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定源对象名,此处以 folderName/originalObjectName 为例。 input.Key = "folderName/originalObjectName" // 指定目标对象名,此处以 newFolderName/newObjectName 为例。 input.NewObjectKey = "newFolderName/newObjectName" // 重命名对象 output, err := obsClient.RenameFile(input) if err == nil { fmt.Printf("Rename File(%s) successful with bucket(%s)!\n", input.Key, input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Rename File(%s) fail with bucket(%s)!\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) } }
-
接口约束 您必须是并行文件系统拥有者或拥有重命名文件的权限,才能重命名文件。建议使用 IAM 或策略进行授权,如果使用IAM则需授予obs:bucket:PutObject权限,如果使用策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象桶不支持,如何创建并行文件系统请参考创建并行文件系统(Go SDK)。
-
返回结果说明 表3 返回结果列表 参数名称 参数类型 描述 output *RenameFileOutput 参数解释: 接口返回信息,详见RenameFileOutput。 err error 参数解释: 接口返回错误信息。 表4 RenameFileOutput 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无
-
准备访问密钥 OBS通过用户账号中的AK和SK进行签名验证,确保通过授权的账号才能访问指定的OBS资源。获取访问密钥前,请确保访问OBS的IAM子用户已开启编程访问,开启方式详见修改或查看IAM用户信息。以下是对AK和SK的解释说明: AK:Access Key ID,接入键标识,用户在 对象存储服务 系统中的接入键标识,一个接入键标识唯一对应一个用户,一个用户可以同时拥有多个接入键标识。对象存储服务系统通过接入键标识识别访问系统的用户。 SK:Secret Access Key,安全接入键,用户在对象存储服务系统中的安全接入键,是用户访问对象存储服务系统的密钥,用户根据安全接入键和请求头域生成鉴权信息。安全接入键和接入键标识一一对应。 访问密钥分永久访问密钥(AK/SK)和临时访问密钥(AK/SK和SecurityToken)两种。每个用户最多可创建两个有效的永久访问密钥。临时访问密钥只在设置的有效期内能够访问OBS,过期后需要重新获取。出于安全性考虑,建议您使用临时访问密钥访问OBS,或使用永久访问密钥访问OBS时,定期更新您的访问密钥(AK/SK)。两种密钥的获取方式如下。 永久访问密钥: 登录管理控制台。 单击页面右上角的用户名,并选择“我的凭证”。 在“我的凭证”页面,单击左侧导航栏的“访问密钥”。 在“访问密钥”页面,单击“新增访问密钥”。 在弹出的“新增访问密钥”对话框中,输入登录密码和对应验证码。 用户如果未绑定邮箱和手机,则只需输入登录密码。 用户如果同时绑定了邮箱和手机,可以选择其中一种方式进行验证。 单击“确定”。 在弹出的“下载确认”提示框中,单击“确定”后,密钥会直接保存到浏览器默认的下载文件夹中。 打开下载下来的“credentials.csv”文件即可获取到访问密钥(AK和SK)。 每个用户最多可创建两个有效的访问密钥。 为防止访问密钥泄露,建议您将其保存到安全的位置。如果用户在此提示框中单击“取消”,则不会下载密钥,后续也将无法重新下载。如果需要使用访问密钥,可以重新创建新的访问密钥。 临时访问密钥: 临时AK/SK和SecurityToken是系统颁发给用户的临时访问令牌,通过接口设置有效期,范围为15分钟至24小时,过期后需要重新获取。临时AK/SK和SecurityToken遵循权限最小化原则。使用临时AK/SK鉴权时,临时AK/SK和SecurityToken必须同时使用。 获取临时访问密钥的接口请参考获取临时AK/SK和securitytoken。 OBS属于全局级服务,所以在获取临时访问密钥时,需要设置Token的使用范围取值为domain,表示获取的Token可以作用于全局服务,全局服务不区分项目或者区域。
-
功能说明 OBS客户端支持通过访问密钥、请求方法类型、请求参数等信息生成一个在Query参数中携带鉴权信息的URL,可将该URL提供给其他用户进行临时访问。在生成URL时,您需要指定URL的有效期来限制访客用户的访问时长。 如果您想授予其他用户对桶或对象临时进行其他操作的权限(例如上传或下载对象),则需要生成带对应请求的URL后(例如使用生成PUT请求的URL上传对象),将该URL提供给其他用户。 如果遇到跨域报错、签名不匹配问题,请参考以下步骤排查问题: 未配置跨域,需要在控制台配置CORS规则,请参考配置桶允许跨域请求。 签名计算问题,请参考URL中携带签名排查签名参数是否正确;比如上传对象功能,后端将Content-Type参与计算签名生成授权URL,但是前端使用授权URL时没有设置Content-Type字段或者传入错误的值,此时会出现跨域错误。解决方案为:Content-Type字段前后端保持一致。 不支持通过 CDN加速 后的 域名 生成临时访问URL。
-
配置自定义域名访问obs 使用自定义的域名,必须在工信部完成备案,具体配置步骤请参考:配置自定义域名。 // 在控制台绑定成功的自定义域名。 String endPoint = "http://your-domain"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AC CES S_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 创建ObsConfiguration配置类实例 ObsConfiguration config = new ObsConfiguration(); config.setEndPoint(endPoint); config.setCname(true); // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, config); // 使用Provider创建ObsClient实例 // ObsClient obsClient = new ObsClient(new EnvironmentVariableObsCredentialsProvider(), config); // ObsClient obsClient = new ObsClient(new EcsObsCredentialsProvider(), config); // 使用访问OBS // 关闭obsClient obsClient.close();
-
ObsConfiguration类支持配置的参数列表 如需提高文件上传下载性能,在网络带宽满足的情况下,可对socketWriteBufferSize,sockeReadBufferSize,readBufferSize,writeBufferSize四个参数进行调优。 如网络状况不佳,建议增大connectionTimeout和socketTimeout的值。 表2 ObsConfiguration类支持配置的参数列表 参数 描述 方法 建议值 connectionTimeout 参数解释: 建立HTTP/HTTPS连接的超时时间。 默认取值: 60000,单位:毫秒。 ObsConfiguration.setConnectionTimeout [10000, 60000] socketTimeout 参数解释: Socket层传输数据的超时时间(单位:毫秒)。 默认取值: 60000,单位:毫秒。 ObsConfiguration.setSocketTimeout [10000, 60000] idleConnectionTime 参数解释: 如果空闲时间超过此参数的设定值,则关闭连接。 默认取值: 30000,单位:毫秒。 ObsConfiguration.setIdleConnectionTime 根据实际情况设置 maxIdleConnections 参数解释: 连接池中最大空闲连接数。 默认取值: 1000,单位:个。 ObsConfiguration.setMaxIdleConnections 根据实际情况设置 maxConnections 参数解释: 最大允许的HTTP并发请求数。 默认取值: 1000,单位:个。 ObsConfiguration.setMaxConnections 默认 maxErrorRetry 参数解释: 请求失败(请求异常、服务端报500或503错误等)后最大的重试次数。 约束限制: 该参数对于上传对象和下载对象接口时,当上传或下载已经进入数据流处理阶段后产生异常中断,此时将不会重试。 默认取值: 3,单位:次。 ObsConfiguration.setMaxErrorRetry [0, 5] endPoint 参数解释: 连接OBS的服务地址。可包含协议类型、域名、端口号。示例:https://your-endpoint:443。(出于安全性考虑,建议使用https协议) 约束限制: 出于DNS解析性能和OBS服务可靠性的考虑,不允许将endPoint设置为IP,必须使用域名访问OBS服务,同时endpoint设置为IP还会导致使用path请求方式访问OBS桶,此方式已经禁止使用。(请在这个页面搜索并查看”禁止使用path请求方式访问OBS桶“相关说明)。 默认取值: 无 ObsConfiguration.setEndPoint 根据实际情况设置 httpProxy 参数解释: HTTP代理配置。 默认取值: 默认为空 ObsConfiguration.setHttpProxy 根据实际情况设置 validateCertificate 参数解释: 是否验证服务端证书。 取值范围: true:验证服务端证书。 false:不验证服务端证书。 默认取值: false ObsConfiguration.setValidateCertificate 根据实际情况设置 verifyResponseContentType 参数解释: 是否验证响应头信息的ContentType。 取值范围: true:验证响应头信息的ContentType。 false:不验证响应头信息的ContentType。 默认取值: true ObsConfiguration.setVerifyResponseContentType 默认 readBufferSize 参数解释: 从Socket流下载对象的缓存大小,-1表示不设置缓存。 默认取值: -1,单位:字节。 ObsConfiguration.setReadBufferSize 根据实际情况设置 writeBufferSize 参数解释: 上传对象到Socket流时的缓存大小,-1表示不设置缓存。 默认取值: -1,单位:字节。 ObsConfiguration.setWriteBufferSize 根据实际情况设置 socketWriteBufferSize 参数解释: Socket发送缓冲区大小,对应java.net.SocketOptions.SO_SNDBUF参数。 默认取值: 默认为-1,单位:字节,表示不设置。 ObsConfiguration.setSocketWriteBufferSize 默认 socketReadBufferSize 参数解释: Socket接收缓冲区大小,对应java.net.SocketOptions.SO_RCVBUF参数。 默认取值: 默认为-1,单位:字节,表示不设置。 ObsConfiguration.setSocketReadBufferSize 默认 keyManagerFactory 参数解释: 用于生成javax.net.ssl.KeyManager的工厂。 默认取值: 默认为空。 ObsConfiguration.setKeyManagerFactory 根据实际情况设置 trustManagerFactory 参数解释: 用于生成javax.net.ssl.TrustManager的工厂。 默认取值: 默认为空。 ObsConfiguration.setTrustManagerFactory 根据实际情况设置 isStrictHostnameVerification 参数解释: 是否严格验证服务端主机名。设置为true后,需要通过javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier去设置一个实现javax.net.ssl.HostnameVerifier接口的对象,用于验证主机名 取值范围: true:严格验证服务端主机名。 false:不严格验证服务端主机名。 默认取值: false ObsConfiguration.setIsStrictHostnameVerification 根据实际情况设置 keepAlive 参数解释: 是否使用长连接访问OBS服务。 取值范围: true:使用长连接访问OBS服务。 false:不使用长连接访问OBS服务。 默认取值: true ObsConfiguration.setKeepAlive 根据实际情况设置 cname 参数解释: 是否通过自定义域名访问OBS服务。 取值范围: true:通过自定义域名访问OBS服务。 false:不通过自定义域名访问OBS服务。 默认取值: false ObsConfiguration.setCname 根据实际情况设置 sslProvider 参数解释: SSLContext的Provider。 默认取值: 使用JDK提供的SSLContext。 ObsConfiguration.setSslProvider 根据实际情况设置 httpProtocolType 参数解释: 访问OBS服务端时使用的HTTP协议类型。 默认取值: HTTP1.1 说明: 如果设置的endPoint不带协议类型,则默认使用HTTPS协议。 ObsConfiguration.setHttpProtocolType 根据实际情况设置 httpDispatcher 参数解释: 自定义分发器。 默认取值: 无 ObsConfiguration.setHttpDispatcher 根据实际情况设置 secureRandom 参数解释: 配置随机数生成器,支持设置为自定义的随机数生成器。 默认取值: 默认为 new SecureRandom() 说明: 在某些平台上new SecureRandom()可能会使用不安全实现。出于安全考虑,建议通过ObsConfiguration.setSecureRandom()设置一个种子是真随机数的SecureRandom。 当操作系统没有足够的熵来生成随机数时(比如系统刚启动时),那么生成真随机数的SecureRandom可能会阻塞,直到足够的熵可用为止。建议同时通过相关措施补充熵(例如linux下的haveged),改善熵源不足时生成真随机数阻塞的问题。 ObsConfiguration.setSecureRandom 根据实际情况设置
-
示例代码 使用不透传访问凭证的客户端类,直接配置访问凭证,除访问凭证外只配置终端节点(endpoint)的示例代码 永久访问密钥(AK/SK)创建OBS客户端的代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 使用访问OBS // 关闭obsClient obsClient.close(); 临时访问密钥(AK/SK/SecurityToken)创建OBS客户端的代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String securityToken = System.getenv("SECRET_TOKEN"); // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); // 使用访问OBS // 关闭obsClient obsClient.close(); BasicObsCredentialsProvider示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 创建ObsClient实例 ObsClient obsClient = new ObsClient(new BasicObsCredentialsProvider(ak, sk), endPoint); // 使用访问OBS // 关闭obsClient obsClient.close(); 透传密钥客户端类(SecretFlexibleObsClient)示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 创建ObsConfiguration配置类实例 ObsConfiguration config = new ObsConfiguration(); config.setEndPoint(endPoint); // 创建SecretFlexibleObsClient实例 SecretFlexibleObsClient obsClient = new SecretFlexibleObsClient(config); // 使用访问OBS // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak1 = System.getenv("ACCESS_KEY_ID"); String sk1 = System.getenv("SECRET_ACCESS_KEY_ID"); obsClient.listBuckets(ak1, sk1); String ak2 = System.getenv("ACCESS_KEY_ID"); String sk2 = System.getenv("SECRET_ACCESS_KEY_ID"); obsClient.listBuckets(ak2, sk2); // 关闭obsClient obsClient.close(); 从环境变量获取访问凭证(EnvironmentVariableObsCredentialsProvider)示例代码 使用该方法需要在环境变量中定义OBS_ACCESS_KEY_ID和OBS_SECRET_ACCESS_KEY分别代表永久的AK和SK。 1 2 3 4 5 6 7 8 9 // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(new EnvironmentVariableObsCredentialsProvider(), endPoint); // 使用访问OBS // 关闭obsClient obsClient.close(); E CS 场景从云服务委托获取访问凭证(EcsObsCredentialsProvider)示例代码 1 2 3 4 5 6 7 8 9 // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(new EcsObsCredentialsProvider(), endPoint); // 使用访问OBS // 关闭obsClient obsClient.close(); 链式获取访问凭证(OBSCredentialsProviderChain)示例代码 1 2 3 4 5 6 7 8 9 // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(new OBSCredentialsProviderChain(), endPoint); // 使用访问OBS // 关闭obsClient obsClient.close(); 使用ObsConfiguration配置参数示例代码 配置KeyManagerFactory,配置后可以在本地保存证书,并校验服务端返回证书是否正确。 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 // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String jksPassword = "you-jks-password"; String jksPath = "/path/to/your/keystore/file"; KeyStore ks = KeyStore.getInstance("JKS"); char[] passArray = jksPassword.toCharArray(); FileInputStream inputStream = new FileInputStream(jksPath); ks.load(inputStream, passArray); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(ks, passArray); String trustJKSPassword = "you-trustJKS-password"; String trustJKSPath = "/path/to/your/trustKeyStore/file"; KeyStore trustKeyStore = KeyStore.getInstance("JKS"); char[] trustPassArray = trustJKSPassword.toCharArray(); FileInputStream trustInputStream = new FileInputStream(trustJKSPath); trustKeyStore.load(trustInputStream, trustPassArray); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustKeyStore); ObsConfiguration config = new ObsConfiguration(); config.setEndPoint(endPoint); config.setKeyManagerFactory(kmf); config.setTrustManagerFactory(tmf); ObsClient obsClient = new ObsClient(ak, sk, config); 本地证书保存格式应为 jks 格式,可以运行以下命令调用 Java 自带的 keytool 工具将 cer 证书转换为 jks 证书。 keytool -import -file your-cer-file.cer -keystore your-keystore-file.jks 配置 HTTP 代理,配置后SDK 将会通过的代理访问服务端。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // Url不要携带协议头"http://"和"https://"。 String proxyUrl = "proxy.com"; int proxyPort = 8080; String proxyUser = "userName"; String proxyPassword = "password"; ObsConfiguration config = new ObsConfiguration(); config.setEndPoint(endPoint); config.setHttpProxy(proxyUrl, proxyPort, proxyUser, proxyPassword); ObsClient obsClient = new ObsClient(ak, sk,config);
-
配置概览 图1 创建并配置客户端概览 如图所示,请根据需要选择客户端类、选择获取访问密钥的方法,以及进行其他配置: 表1 创建并配置客户端概览 选择项 可选项 说明 示例代码 客户端类 不透传密钥的客户端类 如果您只想配置一次访问凭证,不想在每一次调用OBS接口时都为客户端设置一次访问密钥,请使用普通客户端类ObsClient创建客户端。 ObsClient示例代码 透传密钥的客户端类 如果您需要在每次调用接口时,都为客户端设置一次访问凭证,OBS Java SDK提供了直接在接口方法中透传AK和SK的OBS客户端类SecretFlexibleObsClient,SecretFlexibleObsClient继承自ObsClient。 SecretFlexibleObsClient示例代码 访问凭证获取方式 从变量传入 创建OBS客户端实例,并使用变量传入方式的访问凭证。 访问凭证变量直接作为参数示例代码 BasicObsCredentialsProvider示例代码 从环境变量获取 创建OBS客户端实例,并使用EnvironmentVariableObsCredentialsProvider从环境变量获取访问凭证。 EnvironmentVariableObsCredentialsProvider示例代码 ECS场景从云服务委托获取 创建OBS客户端实例,并使用EcsObsCredentialsProvider从ECS服务器自动获取临时访问密钥,并且访问凭证会定期自动刷新。 须知: 使用EcsObsCredentialsProvider的前提,应用程序须运行在ECS服务器上,并且ECS绑定了IAM对ECS的云服务委托(该委托拥有OBS权限)。 请确保服务端和应用程序部署所在环境的UTC时间一致,否则可能会导致临时访问密钥无法及时刷新。 使用该方式创建客户端时,SDK会请求固定IP(169.254.169.254)的API获取临时AKSK,具体请参见在ECS上获取Security Key。 EnvironmentVariableObsCredentialsProvider示例代码 链式获取 以链式的方式从预定义方式列表中搜索访问密钥,以第一组成功获取到的访问密钥创建OBS客户端。 当前顺序是默认先从环境变量,再从ECS服务器委托中进行搜索,暂不支持自定义获取方式和顺序。 OBSCredentialsProviderChain示例代码 其他配置 只配置终端节点(endpoint) 除了访问凭证外,只配置中终端节点(endpoint)参数。 除访问凭证外只配置endpoint示例代码 除了配置终端节点(endpoint)还有其他配置 除了配置终端节点(endpoint)还需要配置HTTP代理、Socket层传输数据超时时间等参数,您可通过ObsConfiguration配置类对ObsClient进行配置,支持的配置项参见表2。 ObsConfiguration示例代码
-
注意事项 客户端在创建时必须同步完成客户端配置,配置机会仅有一次,创建完成后,不能对客户端进行二次配置。 在使用临时aksk时,aksk会有过期时间,可调用ObsClient.refresh("yourAccessKey", "yourSecretKey", "yourSecurityToken")刷新ObsClient的aksk,不必重新创建ObsClient。 建议整个代码工程全局使用一个ObsClient客户端,只在程序初始化时创建一次,因为创建多个ObsClient客户端在高并发场景下会影响性能。 ObsClient是线程安全的,可在并发场景下使用。 ObsClient在调用ObsClient.close方法关闭后不能再次使用,保证全局使用一个ObsClient客户端的情况下,不建议主动关闭ObsClient客户端。
-
原因 通过桶策略给IAM用户配置桶的读写权限后,实际上授予的权限如下: GetObject:下载对象 GetObjectVersion:下载多版本对象 PutObject:上传对象 DeleteObject:删除对象 DeleteObjectVersion:删除多版本对象 上述每一个权限对应一个OBS功能接口,IAM用户使用API或SDK可以正常调用这些接口。但是通过控制台或者客户端工具(OBS Browser+)登录时,加载桶列表时会调用获取桶列表(ListAllMyBuckets)等接口,加载对象列表时会调用列举桶内对象(ListBucket)等接口,其他页面也会调用其他的OBS接口。而授予的读写权限中并没有包含这些操作的权限,所以会提示“拒绝访问,请检查响应权限”,或者“不允许在请求的资源上执行此操作”。
-
包年包月 对象存储服务同时提供包年包月计费模式,您可以购买包年包月套餐,提前规划资源的使用额度和时长。 资源包包括标准存储包(单AZ)、标准存储包(多AZ)、归档存储包、公网流出流量包、跨区域复制流量包和回源流量包。 OBS各类资源包的详细介绍,请参见OBS计费说明。 进入购买资源包页面。 根据界面提示进行信息配置。 资源包所属区域和类型需要和桶属性相匹配,才能正常使用资源包抵扣桶的相关费用。 “定向使用”可限定企业项目使用所购资源包,即仅在所选企业项目下的桶才能使用此资源包进行抵扣,同时也需满足资源包所属区域和类型与桶属性匹配的要求。该选项仅对企业账号展示。 单击“加入清单”。 在右侧确认资源包清单后,单击“立即购买”。 确认订单无误后,单击“去支付”。 如果发现订单有误,也可单击“上一步”修改订单后再继续购买。 根据界面提示进行订单支付。 资源包购买注意事项: 支持续订,暂不支持退订。资源包到期后,不会影响您在OBS上的使用和数据安全。您只要保证云服务账号上有足够的余额,系统会自动以按需计费的模式进行结算。 资源包每月重置规则说明: 按订购周期重置,即购买后每月同一天24:00:00重置资源额度。例如:您在4月15日任意时刻购买6个月的公网流出流量包2TB并支付,您在4月15日到5月15日24:00:00间就会有2TB的公网流出流量可以使用。我们会在5月16日00:00:00,重新给您2TB的公网流出流量,此2TB流量您可以在5月16日00:00:00到6月15日24:00:00间使用,以此类推,直至购买的资源包到期为止。如果上个月有未使用完的额度,也会在每月重置时清零。 使用OBS。 资源包购买完成后可以直接使用OBS,无需绑定,系统会根据资源包和桶属性自动匹配。当资源包和桶属性一致时,会自动使用资源包抵扣对应的计费项,无法抵扣的计费项将按需计费。
-
直接删除碎片 当碎片不再需要时,您可以通过以下多种方式删除桶中碎片来节约存储空间。 碎片删除后无法恢复,删除碎片会导致其对应的上传任务进度丢失,删除前请确保碎片不再需要。 表2 删除碎片的不同方式 工具 方法 OBS控制台 OBS控制台提供图形化的碎片列表界面,您可以一键批量删除桶中所选中的碎片。 具体操作请参见清理碎片。 OBS Browser+ 您可以一键批量删除桶中所选中的碎片。也可以单击页面上方“删除所有”,清除所有碎片。 obsutil obsutil分段上传任务产生的碎片,可以通过删除分段上传任务来删除碎片。如果一个桶内有多个分段任务,则需要删除多个任务来删除桶中所有碎片。 具体操作请参见删除分段上传任务。 OBS API 您可以通过以下步骤来直接删除桶中碎片: 使用列举桶中已初始化多段任务接口,来列举所有分段上传任务,获取所有UploadId。 使用取消多段上传任务接口,来取消分段上传任务,即可删除所有碎片。 OBS SDK OBS SDK通常只有采用多段上传,并且最后没有合并多段上传任务时会产生碎片,您通过取消多段上传任务来删除桶内碎片。步骤如下: 使用ObsClient.listMultipartUploads列举所有分段上传任务,获取所有UploadId。 使用ObsClient.abortMultipartUpload取消分段上传任务,即可删除所有分段碎片。
-
继续运行中断或失败的分段上传任务消除碎片 OBS提供任务管理功能,当分段上传任务中断或失败时,您可以通过以下多种方式继续运行这些任务,任务完成后,碎片也会随着消除。 表1 消除碎片的不同方式 方式 操作指导 OBS Browser+ OBS Browser+提供图形化的任务管理界面,单击选中碎片对应的上传对象任务,运行该任务至完成,碎片即可消除。 obsutil obsutil通过结果清单记录失败的任务,您可以通过结果清单对应的任务号恢复失败的上传任务,从而消除碎片。 具体操作请参考恢复失败的上传任务。 OBS SDK OBS SDK通过记录上传进度提供断点续传,您可以读取记录的进度,继续上传中断或失败的分段上传任务。 具体操作请参考各SDK开发指南中的“断点续传”章节。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格