华为云用户手册

  • 创建桶 以下代码展示了创建一个名为examplebucket的桶,设置桶所在区域为华北-北京四,设置桶权限为私有,存储类别为标准存储,存储冗余类别为单AZ。了解更多请参见创建桶(Java SDK)。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.AccessControlList; import com.obs.services.model.AvailableZoneEnum; import com.obs.services.model.CreateBucketRequest; import com.obs.services.model.ObsBucket; import com.obs.services.model.StorageClassEnum; public class CreateBucket001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("AC CES S_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { CreateBucketRequest request = new CreateBucketRequest(); //示例桶名 String exampleBucket = "examplebucket"; //示例桶区域位置 String exampleLocation = "cn-north-4"; request.setBucketName(exampleBucket); // 设置桶访问权限为私有读写,默认也是私有读写 request.setAcl(AccessControlList.REST_CANNED_PRIVATE); // 设置桶的存储类别为标准存储 request.setBucketStorageClass(StorageClassEnum.STANDARD); // 设置桶区域位置(以区域为华北-北京四为例),location 需要与 endpoint的位置信息一致 request.setLocation(exampleLocation); // 指定创建多AZ桶,如果不设置,默认创建单AZ桶 request.setAvailableZone(AvailableZoneEnum.MULTI_AZ); // 创建桶 ObsBucket bucket = obsClient.createBucket(request); // 创建桶成功 System.out.println("CreateBucket successfully"); System.out.println("RequestId:"+bucket.getRequestId()); } catch (ObsException e) { System.out.println("CreateBucket failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code: " + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message: " + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); } catch (Exception e) { System.out.println("CreateBucket failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 代码示例 本示例用于新建名为examplebucket的并行文件系统。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.BucketTypeEnum; import com.obs.services.model.CreateBucketRequest; import com.obs.services.model.HeaderResponse; public class CreateBucket001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // 创建并行文件系统成功 CreateBucketRequest request = new CreateBucketRequest(); request.setBucketName("examplebucket"); request.setBucketType(BucketTypeEnum.PFS); // 指定所属区域,location 需要与 endpoint的位置信息 一致 request.setLocation("your_region"); HeaderResponse response = obsClient.createBucket(request); System.out.println("CreateBucket successfully"); System.out.println("StatusCode:" + response.getStatusCode()); System.out.println("RequestId:" + response.getRequestId()); } catch (ObsException e) { System.out.println("CreateBucket failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("CreateBucket failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 接口约束 您必须拥有obs:bucket:CreateBucket权限,才能创建并行文件系统。建议使用 IAM 进行授权,配置方式详见使用IAM自定义策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 不支持将已有的OBS桶修改为并行文件系统。 并行文件系统暂不支持配额配置功能,默认无配额限制。 同一账号下,可以创建多个桶,数量上限是100个(包括对象桶和并行文件系统,不区分地域),存储桶中的对象数量和大小没有限制。 新创建并行文件系统的桶名在OBS中必须是唯一的。如果是同一个用户重复创建同一区域的同名桶时返回HTTP状态码200。除此以外的其他场景重复创建同名桶返回HTTP状态码409,表明桶已存在。 用户删除并行文件系统后,需要等待30分钟才能创建同名桶和并行文件系统。 并不是所有区域都支持创建多AZ并行文件系统,你可以在产品价格详情页面,查询指定区域是否支持多AZ。
  • 功能说明 并行文件系统(Parallel File System)是 对象存储服务 (Object Storage Service,OBS)提供的一种经过优化的高性能文件系统,提供毫秒级别访问时延,TB/s级别带宽和百万级别的IOPS,能够快速处理高性能计算(HPC)工作负载。 作为对象存储服务的子产品,并行文件系统支持用户按照标准的OBS接口读取数据。也支持通过部署在弹性云服务器中的PFS客户端(obsfs工具),按照POSIX文件语义读写数据;通过obsfs用户可以将创建的并行文件系统挂载到云端Linux服务器上,并能像操作本地文件系统一样对并行文件系统内的文件和目录进行在线处理,包括:创建和删除文件/目录,重命名文件/目录,修改写文件等操作。 您可以通过ObsClient.createBucket创建并行文件系统。
  • 其他使用前须知 请确认您已经熟悉OBS的基本概念,如桶(Bucket)、对象(Object)、访问密钥(AK和SK)、终端节点(Endpoint)和访问域名等。 您可以先参考OBS客户端通用示例,了解OBS Java SDK接口调用的通用方式。 使用OBS客户端进行接口调用操作完成后,没有异常抛出,则表明返回值有效;如果抛出异常,则说明操作失败,此时可从SDK自定义异常实例中获取错误信息。 使用OBS客户端进行接口调用成功后,均会返回包含响应头信息的SDK公共响应头实例(或其子类实例)。 当前各区域特性开放不一致,部分特性只在部分区域开放,使用过程中如果接口HTTP状态码为405,请确认该区域是否支持该功能特性。您可以查看功能总览确认区域是否支持该功能特性,或者提交工单寻求技术支持。
  • 接口约束 您必须是桶拥有者或拥有上传对象的权限,才能上传对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 HTML表单中的policy,signature的值均是从ObsClient.createPostSignature的返回结果中获取。 上传对象 contentType字段需要手动修改为对应的Content-Type值。 在设置对象ACL权限时,HTML表单中的acl取值参见 OBS预定义的权限控制策略。 您可以直接下载表单HTML示例PostDemo。
  • 返回结果说明 表3 PostSignatureResponse 参数名称 参数类型 描述 OriginPolicy String 参数解释: Policy未经过Base64之前的值,仅用于校验。示例如下: {"expiration":"2023-09-12T12:52:59Z","conditions":[{"content-type":"text/plain"},{"bucket":"examplebucket"},{"key":"example/objectname"},]}" 默认取值: 无 Policy String 参数解释: 表单中的policy,已经Base64之后的值。示例如下: eyJleHBpcmF0aW9uIjoiMjAyMy0wOS0xMlQxMjo1Mjo1OVoiLCJjb25kaXRpb25zIjpbeyJjb250ZW50LXR5cGUiOiJ0ZXh0L3BsYWluIn0seyJidWNrZXQiOiJleGFtcGxlYnVja2V0In0seyJrZXkiOiJleGFtcGxlL29iamVjdG5hbWUifSxdfQ== 默认取值: 无 Signature String 参数解释: 表单中的signature。示例如下: g0jQr4v9VWd1Q2FOFDG6LGfV9Cw= 默认取值: 无
  • 功能说明 基于表单上传是使用HTML表单形式上传对象到指定桶中,对象最大不能超过5GB。 您可以通过ObsClient.createPostSignature生成基于表单上传的请求参数。使用代码模拟表单上传的完整代码示例,参见PostObjectSample。您也可以通过如下步骤进行表单上传: 使用ObsClient.createPostSignature生成用于鉴权的请求参数。 准备表单HTML页面。 将生成的请求参数填入HTML页面。 选择本地文件,进行表单上传。 使用SDK生成的用于鉴权的请求参数包括两个: Policy,对应表单中policy字段。 Signature,对应表单中的signature字段。
  • 返回结果说明 表2 BucketStoragePolicyConfiguration 参数名称 参数类型 描述 storageClass StorageClassEnum 参数解释: 桶的存储类别,详见StorageClassEnum。 表3 StorageClassEnum 常量名 原始值 说明 STANDARD STANDARD 标准存储。 WARM WARM 低频访问存储。 COLD COLD 归档存储。
  • 接口约束 您必须是桶拥有者或拥有获取桶存储类别的权限,才能获取桶存储类别。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetBucketStoragePolicy权限,如果使用桶策略则需授予GetBucketStoragePolicy权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
  • 代码示例 本示例用于获取exampleBucket桶的桶存储类别。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.BucketStoragePolicyConfiguration; public class GetBucketStoragePolicy001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { //示例桶名 String exampleBucket = "examplebucket"; //获取桶存储类别 BucketStoragePolicyConfiguration storagePolicy = obsClient.getBucketStoragePolicy(exampleBucket); System.out.println("GetBucketStoragePolicy successfully"); System.out.println("GetBucketStorageClass:" + storagePolicy.getBucketStorageClass()); } catch (ObsException e) { System.out.println("GetBucketStoragePolicy failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("GetBucketStoragePolicy failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 功能介绍 OBS支持对桶操作进行权限控制,您可以为桶设置访问策略,指定某一个用户对某一个桶是否有权行使某一项指定操作。OBS权限控制的方式有IAM、桶策略和ACL三种,ACL按照粒度又分为桶ACL和对象ACL,本节将对桶ACL接口进行详细介绍,更多权限相关内容可参见《对象存储服务权限配置指南》的OBS权限控制概述章节。 桶ACL是跨账号场景的权限,设置授权的对象不是当前账号,也不是当前账号下的IAM用户,而是另一个云账号及其账号下的IAM用户;授权的范围是以桶为粒度的,一条ACL策略为为一个桶设置策略,因此设置ACL策略时您必须明确指定桶名;桶ACL授予的权限包括桶的访问权限和桶ACL的访问权限两个方面,桶的访问权限包括对桶及桶内对象的查看和编辑权限,桶ACL的访问权限包括对桶ACL策略的查看和编辑权限,详情可参见ACL权限控制方式介绍。 调用获取桶ACL接口,您可以获取指定桶的ACL策略。
  • 接口约束 您必须是桶拥有者或拥有获取桶ACL的权限,才能获取桶ACL。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetBucketAcl权限,如果使用桶策略则需授予GetBucketAcl权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 获取桶访问权限请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
  • 配置自定义域名访问obs 使用自定义的域名,必须在工信部完成备案,具体配置步骤请参考:配置自定义域名。 // 在控制台绑定成功的自定义域名。 String endPoint = "http://your-domain"; // 认证用的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"); // 创建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服务。 默认取值: 无 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 // 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 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客户端。
  • 准备访问密钥 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)。两种密钥的获取方式如下。 永久访问密钥: 登录OBS控制台。 单击页面右上角的用户名,并选择“我的凭证”。 在“我的凭证”页面,单击左侧导航栏的“访问密钥”。 在“访问密钥”页面,单击“新增访问密钥”。 在弹出的“新增访问密钥”对话框中,输入登录密码和对应验证码。 用户如果未绑定邮箱和手机,则只需输入登录密码。 用户如果同时绑定了邮箱和手机,可以选择其中一种方式进行验证。 单击“确定”。 在弹出的“下载确认”提示框中,单击“确定”后,密钥会直接保存到浏览器默认的下载文件夹中。 打开下载下来的“credentials.csv”文件既可获取到访问密钥(AK和SK)。 每个用户最多可创建两个有效的访问密钥。 为防止访问密钥泄露,建议您将其保存到安全的位置。如果用户在此提示框中单击“取消”,则不会下载密钥,后续也将无法重新下载。如果需要使用访问密钥,可以重新创建新的访问密钥。 临时访问密钥: 临时AK/SK和SecurityToken是系统颁发给用户的临时访问令牌,通过接口设置有效期,范围为15分钟至24小时,过期后需要重新获取。临时AK/SK和SecurityToken遵循权限最小化原则。使用临时AK/SK鉴权时,临时AK/SK和SecurityToken必须同时使用。 获取临时访问密钥的接口请参考获取临时AK/SK和securitytoken。 OBS属于全局级服务,所以在获取临时访问密钥时,需要设置Token的使用范围取值为domain,表示获取的Token可以作用于全局服务,全局服务不区分项目或者区域。
  • 代码示例 本示例用于设置exampleBucket桶的桶策略。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; public class SetBucketPolicy001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // 示例桶名 String exampleBucket = "examplebucket"; // 示例桶策略 String examplePolicy = "{\"Statement\":[{\"Principal\":\"*\",\"Effect\":\"Allow\",\"Action\":\"ListBucket\",\"Resource\":\"" + exampleBucket + "\"}]}"; obsClient.setBucketPolicy(exampleBucket, examplePolicy); System.out.println("SetBucketAcl successfully"); } catch (ObsException e) { System.out.println("SetBucketAcl failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("SetBucketAcl failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 设置桶策略请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 policy String 必选 参数解释: 策略信息,JSON格式的字符串。 约束限制: Policy中的Resource字段包含的桶名必须和当前设置桶策略的桶名一致。 Policy具体格式请参考Policy格式。 默认取值: 无
  • 接口约束 创建桶和获取桶列表这两个服务级的操作权限,需要通过IAM权限配置。 由于缓存的存在,配置桶策略后,最长需要等待5分钟策略才能生效。 您必须是桶拥有者或拥有设置桶策略的权限,才能设置桶策略。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:PutBucketPolicy权限,如果使用桶策略则需授予PutBucketPolicy权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 请注意,调用设置桶策略接口时,最新一次配置会覆盖原有配置。例如,您已设置了A,B,C 和 D 四个桶策略,现需要添加新的桶策略E,则配置桶策略 E 时,需在原有四个策略的基础上添加策略 E,然后重新上传所有策略。同理,如果您需要删除桶策略 D,则需将策略 D 从原有的 A,B,C 和 D 四个策略中移除,然后重新上传策略 A,B 和C。 桶策略内容的具体格式(JSON格式字符串)请参考对象存储服务API参考。 以下两种场景无法使用此接口获取桶策略,系统将返回“404 NoSuchBucketPolicy”的错误: 指定桶的策略不存在。 指定桶的标准桶策略为私有且未设置高级桶策略。
  • 功能说明 OBS支持对桶操作进行权限控制,您可以为桶设置访问策略,指定某一个用户对某一个桶是否有权行使某一项指定操作。OBS权限控制的方式有IAM、桶策略和ACL三种,本节将对桶策略接口进行详细介绍,更多权限相关内容可参见《对象存储服务权限配置指南》的OBS权限控制概述章节。 桶策略是作用于所配置的OBS桶及桶内对象的,您可以通过桶策略可为IAM用户或其他账号授权桶及桶内对象的操作权限。允许其他云账号访问OBS资源,可以使用桶策略的方式授权对应权限。当不同的桶对于不同的IAM用户有不同的访问控制需求时,需使用桶策略分别授权IAM用户不同的权限。
  • 代码示例 本示例用于将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 45 46 47 48 49 50 51 52 53 54 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.RenameObjectRequest; import com.obs.services.model.RenameObjectResult; public class RenameObject001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // 重命名对象 RenameObjectRequest request = new RenameObjectRequest(); request.setBucketName("examplebucket"); // objectKey 为原对象的完整对象名 request.setObjectKey("folderName/originalObjectName"); // newObjectKey 为目标对象的完整对象名 request.setNewObjectKey("newFolderName/newObjectName"); RenameObjectResult result = obsClient.renameObject(request); System.out.println("renameObject successfully"); System.out.println("HTTP Code:" + result.getStatusCode()); } catch (ObsException e) { System.out.println("renameObject failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("renameObject failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 接口约束 您必须是并行文件系统拥有者或拥有重命名文件的权限,才能重命名文件。建议使用IAM或策略进行授权,如果使用IAM则需授予obs:bucket:PutObject权限,如果使用策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象并行文件系统不支持,如何创建并行文件系统请参考创建并行文件系统(Java SDK)。
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request RenameObjectRequest 必选 参数解释: 重命名对象请求参数,详见RenameObjectRequest。 表2 RenameObjectRequest 参数名称 参数类型 是否可选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 objectKey String 必选 参数解释: 原对象名称。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 newObjectKey String 必选 参数解释: 修改后的目标对象名称。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无
  • DES传输的数据最终存放在哪里? 使用DES传输的数据会存放在对象存储服务(Object Storage Service,OBS)中,OBS是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。关于OBS服务的详细介绍可参见对象存储服务产品概述。 目前DES不支持直接将数据上传到其他云服务,传输的数据最终存放在OBS中,OBS可以作为其他云服务的存储资源池,还可以作为其他云服务的数据分析学习的数据源。如果用户需使用DES将待数据传输到其他云服务,可先将数据上传到OBS,然后以OBS为资源背景使用其他云服务。 父主题: 服务概念类
  • 使用DES把数据上传到OBS后,数据目录结构会变化吗? 不会。虽然挂载上传数据时,生成“xxx/deshare/DES服务单/数据源目录”的挂载前缀做传输密钥,但DES把用户数据成功上传到OBS中后,OBS会保留用户存储在Teleport或磁盘设备中数据的目录结构。 因OBS不支持文件目录系统的“超链接”,如果用户传输数据的文件目录中有通过“超链接”来获取的文件,DES传输数据过程中“超链接”会失效,而“超链接”中文件会被跳过,不会上传到OBS。 父主题: 服务操作类
共100000条