华为云用户手册

  • 接口约束 桶配额值必须为非负整数,单位为字节。 桶的拥有者的状态是欠费冻结状态时不可以查询桶配额信息。 您必须是桶拥有者或拥有获取桶配额的权限,才能获取桶配额。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetBucketQuota权限,如果使用桶策略则需授予GetBucketQuota权限。相关授权方式介绍可参见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 910111213141516171819202122232425262728293031323334353637383940414243444546474849 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.BucketQuota;public class GetBucketQuota001 { 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 { //示例桶名 String exampleBucket = "examplebucket"; //获取桶配额 BucketQuota quota = obsClient.getBucketQuota(exampleBucket); System.out.println("GetBucketQuota successfully"); System.out.println("GetBucketQuota:" + quota.getBucketQuota() + " bytes"); } catch (ObsException e) { System.out.println("GetBucketQuota 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("GetBucketQuota failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 接口约束 您必须是桶拥有者或拥有获取桶元数据的权限,才能获取桶元数据。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:HeadBucket权限,如果使用桶策略则需授予HeadBucket权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 BucketMetadataInfoResult.getAllowMethods等方法的值参见桶的跨域资源共享(CORS)配置。
  • 代码示例 本示例用于获取examplebucke桶的元数据信息,指定的跨域请求origin为“http://www.exampleorigin.com”。 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.BucketMetadataInfoRequest;import com.obs.services.model.BucketMetadataInfoResult;public class GetBucketMetadata001 { 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"; //示例Origin String exampleOrigin = "http://www.exampleorigin.com"; BucketMetadataInfoRequest request = new BucketMetadataInfoRequest(exampleBucket); //只有在涉及 cors 时才需要 setOrigin request.setOrigin(exampleOrigin); // 获取桶元数据 BucketMetadataInfoResult result = obsClient.getBucketMetadata(request); System.out.println("GetBucketMetadata successfully"); System.out.println("GetBucketType:" + result.getBucketType()); System.out.println("GetLocation:" + result.getLocation()); System.out.println("GetBucketStorageClass:" + result.getBucketStorageClass()); System.out.println("GetObsVersion:" + result.getObsVersion()); System.out.println("GetAllowOrigin:" + result.getAllowOrigin()); System.out.println("GetMaxAge:" + result.getMaxAge()); System.out.println("GetAllowHeaders:" + result.getAllowHeaders()); System.out.println("GetAllowMethods:" + result.getAllowMethods()); System.out.println("GetExposeHeaders:" + result.getExposeHeaders()); } catch (ObsException e) { System.out.println("GetBucketMetadata 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("GetBucketMetadata failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 接口约束 您必须是并行文件系统拥有者或拥有截断对象的权限,才能截断对象。建议使用IAM或策略进行授权,如果使用IAM则需授予obs:bucket:PutObject权限,如果使用策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象并行文件系统不支持,如何创建并行文件系统请参考创建并行文件系统(Java SDK)。
  • 代码示例 本示例用于将examplebucket并行文件系统中的objectname对象截断到指定大小,大小指定为1024L。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.TruncateObjectRequest;import com.obs.services.model.TruncateObjectResult;public class TruncateObject001 { 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 { // 截断操作 TruncateObjectRequest request = new TruncateObjectRequest(); request.setBucketName("examplebucket"); request.setObjectKey("objectname"); request.setNewLength(1024L); TruncateObjectResult result = obsClient.truncateObject(request); System.out.println("truncateObject successfully"); System.out.println("HTTP Code: " + result.getStatusCode()); } catch (ObsException e) { System.out.println("truncateObject 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("truncateObject failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request TruncateObjectRequest 必选 参数解释: 截断对象请求参数,详见TruncateObjectRequest。 表2 TruncateObjectRequest 参数名称 参数类型 是否可选 描述 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的字符串。 默认取值: 无 newLength long 必选 参数解释: 文件截断后的大小。 默认取值: 无
  • 代码示例 本示例用于获取example-bucket桶,配置规则id为exampleConfigId001的清单规则。 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.inventory.GetInventoryConfigurationRequest;import com.obs.services.model.inventory.GetInventoryConfigurationResult;import com.obs.services.model.inventory.InventoryConfiguration;public class GetInventoryConfiguration001{ 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 exampleBucketName = "example-bucket"; String exampleConfigurationId = "exampleConfigId001"; GetInventoryConfigurationRequest request = new GetInventoryConfigurationRequest(exampleBucketName, exampleConfigurationId); // 获取桶清单配置规则 GetInventoryConfigurationResult result = obsClient.getInventoryConfiguration(request); InventoryConfiguration inventoryConfiguration = result.getInventoryConfiguration(); // 打印inventoryConfiguration的所有成员 System.out.println("ConfigurationId:" + inventoryConfiguration.getConfigurationId()); System.out.println("DestinationBucket:" + inventoryConfiguration.getDestinationBucket()); System.out.println("InventoryFormat:" + inventoryConfiguration.getInventoryFormat()); System.out.println("Enabled:" + inventoryConfiguration.getEnabled()); System.out.println("Frequency:" + inventoryConfiguration.getFrequency()); System.out.println("IncludedObjectVersions:" + inventoryConfiguration.getIncludedObjectVersions()); System.out.println("InventoryPrefix:" + inventoryConfiguration.getInventoryPrefix()); System.out.println("ObjectPrefix:" + inventoryConfiguration.getObjectPrefix()); System.out.println("OptionalFields:" + inventoryConfiguration.getOptionalFields()); // 打印HTTP状态码 System.out.println("HTTP Code: " + result.getStatusCode()); System.out.println("GetInventoryConfiguration succeeded"); } catch (ObsException e) { System.out.println("GetInventoryConfiguration 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("GetInventoryConfiguration failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 接口约束 您必须是桶拥有者或者拥有获取桶清单权限,才能获取桶清单。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetInventoryConfiguration权限,如果使用桶策略则需授予GetInventoryConfiguration权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 请求参数说明 表1 GetInventoryConfigurationRequest 参数名称 参数类型 是否必选 描述 bucketName String 是 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 configurationId String 是 参数解释: 清单配置的id。 约束限制: 最长64字节,必须由以下字符组成"a-z"、"A-Z"、"0-9"、"-"、"_"和"." 默认取值: 无
  • 接口约束 您必须是桶拥有者或者拥有设置桶清单权限,才能设置桶清单。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:PutBucketInventoryConfiguration权限,如果使用桶策略则需授予PutBucketInventoryConfiguration权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 桶版本限制: 只有OBS 3.0的桶支持配置清单,目标桶无OBS版本限制。 清单数量限制: 一个桶最多支持10条桶清单。 源桶和目标桶限制: 桶清单配置的源桶和目标桶必须归属同一个账号。 桶清单配置的源桶和目标桶必须归属同一个区域。 桶清单中配置的目标桶不能开启桶默认加密。 功能限制: 只支持生成 CS V格式的清单文件。 桶清单筛选条件目前仅支持设置为所有对象或指定前缀的对象。 同一个桶中多条清单规则的筛选条件不能彼此包含: 如果已经存在针对桶中所有对象的规则,则无法再创建按对象名前缀筛选的规则。如需创建,要先删除针对所有对象的规则。 如果已经存在按对象名前缀筛选的规则,则无法再创建针对桶中所有对象的规则。如需创建,要先删除所有按对象名前缀筛选的规则。 如果已经存在某个按对象名前缀筛选的规则(如前缀ab),则无法再创建与其存在包含或被包含关系的规则(如前缀a或前缀abc)。如需创建,要先删除存在包含或被包含关系的规则。 桶清单加密方式目前只支持SSE-KMS。 权限限制: 清单文件使用OBS系统用户上传到目标桶,目标桶必须给OBS系统用户写权限。 其他: 暂不对桶清单功能收费,桶清单生成后只按照存量计费。
  • 代码示例 本示例将为example-bucket桶设置桶清单,桶清单会统计前缀为exampleObjectPrefix的对象的信息。清单文件将存储在example-target-bucket桶中,清单文件的前缀为exampleInventoryPrefix。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.HeaderResponse;import com.obs.services.model.inventory.InventoryConfiguration;import com.obs.services.model.inventory.SetInventoryConfigurationRequest;public class SetInventoryConfiguration001{ 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 exampleBucketName = "example-bucket"; String exampleTargetBucketName = "example-target-bucket"; String exampleConfigurationId = "exampleConfigId001"; String exampleInventoryPrefix = "exampleInventoryPrefix"; String exampleObjectPrefix = "exampleObjectPrefix"; // 设置桶清单配置规则详细参数 InventoryConfiguration exampleConfiguration = new InventoryConfiguration(); exampleConfiguration.setDestinationBucket(exampleTargetBucketName); exampleConfiguration.setConfigurationId(exampleConfigurationId); exampleConfiguration.setInventoryFormat(InventoryConfiguration.InventoryFormatOptions.CSV); exampleConfiguration.setFrequency(InventoryConfiguration.FrequencyOptions.DAILY); exampleConfiguration.setEnabled(true); exampleConfiguration.setIncludedObjectVersions( InventoryConfiguration.IncludedObjectVersionsOptions.CURRENT); exampleConfiguration.setInventoryPrefix(exampleInventoryPrefix); exampleConfiguration.setObjectPrefix(exampleObjectPrefix); // 设置清单文件中会包含的额外的对象元数据字段 exampleConfiguration .getOptionalFields() .add(InventoryConfiguration.OptionalFieldOptions.IS_MULTIPART_UPLOADED); exampleConfiguration.getOptionalFields().add(InventoryConfiguration.OptionalFieldOptions.ETAG); exampleConfiguration .getOptionalFields() .add(InventoryConfiguration.OptionalFieldOptions.REPLICATION_STATUS); SetInventoryConfigurationRequest request = new SetInventoryConfigurationRequest(exampleBucketName, exampleConfiguration); // 设置桶清单配置规则 HeaderResponse response = obsClient.setInventoryConfiguration(request); System.out.println("SetInventoryConfiguration succeeded"); System.out.println("HTTP Code: " + response.getStatusCode()); } catch (ObsException e) { System.out.println("SetInventoryConfiguration 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("SetInventoryConfiguration failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 配置自定义 域名 访问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.htmlString 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// 关闭obsClientobsClient.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 910111213 // 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.htmlString ak = System.getenv("ACCESS_KEY_ID");String sk = System.getenv("SECRET_ACCESS_KEY_ID");// 创建ObsClient实例ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 使用访问OBS // 关闭obsClientobsClient.close(); 临时访问密钥(AK/SK/SecurityToken)创建OBS客户端的代码如下: 1 2 3 4 5 6 7 8 91011121314 // 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.htmlString 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 // 关闭obsClientobsClient.close(); BasicObsCredentialsProvider示例代码 1 2 3 4 5 6 7 8 910111213 // 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.htmlString 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 // 关闭obsClientobsClient.close(); 透传密钥客户端类(SecretFlexibleObsClient)示例代码 1 2 3 4 5 6 7 8 9101112131415161718192021 // 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.htmlString 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);// 关闭obsClientobsClient.close(); 从环境变量获取访问凭证(EnvironmentVariableObsCredentialsProvider)示例代码 使用该方法需要在环境变量中定义OBS_ACCESS_KEY_ID和OBS_SECRET_ACCESS_KEY分别代表永久的AK和SK。 123456789 // Endpoint以北京四为例,其他地区请按实际情况填写。String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";// 创建ObsClient实例ObsClient obsClient = new ObsClient(new EnvironmentVariableObsCredentialsProvider(), endPoint); // 使用访问OBS // 关闭obsClientobsClient.close(); ECS场景从云服务委托获取访问凭证(EcsObsCredentialsProvider)示例代码 123456789 // Endpoint以北京四为例,其他地区请按实际情况填写。String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";// 创建ObsClient实例ObsClient obsClient = new ObsClient(new EcsObsCredentialsProvider(), endPoint); // 使用访问OBS // 关闭obsClientobsClient.close(); 链式获取访问凭证(OBSCredentialsProviderChain)示例代码 123456789 // Endpoint以北京四为例,其他地区请按实际情况填写。String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";// 创建ObsClient实例ObsClient obsClient = new ObsClient(new OBSCredentialsProviderChain(), endPoint); // 使用访问OBS // 关闭obsClientobsClient.close(); 使用ObsConfiguration配置参数示例代码 配置KeyManagerFactory,配置后可以在本地保存证书,并校验服务端返回证书是否正确。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 // 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.htmlString 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 910111213141516 // 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.htmlString 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);
  • 注意事项 客户端在创建时必须同步完成客户端配置,配置机会仅有一次,创建完成后,不能对客户端进行二次配置。 在使用临时aksk时,aksk会有过期时间,可调用ObsClient.refresh("yourAccessKey", "yourSecretKey", "yourSecurityToken")刷新ObsClient的aksk,不必重新创建ObsClient。 建议整个代码工程全局使用一个ObsClient客户端,只在程序初始化时创建一次,因为创建多个ObsClient客户端在高并发场景下会影响性能。 ObsClient是线程安全的,可在并发场景下使用。 ObsClient在调用ObsClient.close方法关闭后不能再次使用,保证全局使用一个ObsClient客户端的情况下,不建议主动关闭ObsClient客户端。
  • 配置概览 图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示例代码
  • 准备访问密钥 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可以作用于全局服务,全局服务不区分项目或者区域。
  • 方式四:自行编译 Jar 包 您可以下载Java SDK源码,然后自行编译 Jar 包。使用本方式安装SDK前,请确保Java环境和Maven环境正确配置并能正常使用,详细步骤如下: 下载SDK源码并解压。 通过命令行进入源码解压目录。 运行如下命令 linux系统: mvn clean package -Dmaven.test.skip=true -f pom-java.xml Windows系统: mvn clean package "-Dmaven.test.skip=true" -f pom-java.xml 构建产物位于解压目录中的target目录下。 将生成的jar包放置于本地工程的依赖路径。
  • 初始化概述(Java SDK) 完成SDK安装之后,您还需要进行初始化工作,初始化工作主要包括两方面,一方面客户端的创建和配置,另一方面是SDK日志配置。 表1 初始化概述 初始化任务 子任务 是否必选 说明 创建并配置客户端 创建客户端 是 OBS客户端是使用Java SDK访问OBS服务的必备媒介,它为调用者提供一系列与OBS服务进行交互的接口,使用OBS Java SDK向OBS发起请求,您需要创建并初始化一个客户端,即一个ObsClient实例。 配置访问密钥 是 基于安全需要,您需要为客户端配置访问凭证以便服务端校验请求的合法性。 配置终端节点及其他选项 终端节点必选,其余配置项可选 为了快速创建和检索到您的资源,需要配置客户端的终端节点,即告知服务端资源所在的区域。 除了访问密钥和终端节点外,您可以根据自身使用场景,为客户端配置其他选项。 配置SDK日志 配置日志等级 否 OBS Java SDK基于Apache Log4j2开源库提供了日志功能,Log4j2框架按照优先级将日志进行了分级处理,您可以配置存储某个级别以上的日志,自行决定存储日志的范围。 OBS Java SDK默认将WARN及WARN以上级别的日志保存到本地。 配置日志存放路径 否 配置日志在本地的存储路径。 父主题: 初始化(Java SDK)
  • 对象上传简介(Java SDK) 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。 在OBS中,用户操作的基本数据单元是对象。OBS Java SDK提供了丰富的对象上传接口,可以通过以下方式上传对象: 流式上传 文件上传 分段上传 追加上传 断点续传上传 基于表单上传 SDK支持上传0KB~5GB的对象。流式上传、文件上传和追加上传的内容大小不能超过5GB;当上传较大文件时,请使用分段上传,分段上传每段内容大小不能超过5GB;基于表单上传提供了基于浏览器表单上传对象的方式。 如果上传的对象权限设置为匿名用户读取权限,对象上传成功后,匿名用户可通过链接地址访问该对象数据。对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 父主题: 上传对象(Java SDK)
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request ModifyObjectRequest 必选 参数解释: 修改写对象请求参数,详见ModifyObjectRequest。 表2 ModifyObjectRequest 参数名称 参数类型 是否可选 描述 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的字符串。 默认取值: 无 position long 必选 参数解释: 修改写操作的位置。 取值范围: 不小于0的长整型。单位:字节。 默认取值: 无 input InputStream 可选 参数解释: 待上传对象的数据流。 默认取值: 无 file File 可选 参数解释: 待上传的本地文件。 默认取值: 无 encodeHeaders boolean 可选 参数解释: 是否开启OBS对请求头域的自动编码。 由于HTTP编码规范限制,无法发送非ASCII码字符,SDK会在发送请求时对您头域中的中文汉字进行url编码,发送编码后数据。如您设置的值content-disposition为attachment; filename="中文.txt",则对象元数据中存储的信息为attachment; filename="%E4%B8%AD%E6%96%87.txt"。使用浏览器访问时浏览器将会自动解码。 取值范围: true:启用SDK编码。 false:不启用SDK编码。 默认取值: true
  • 代码示例 本示例用于指定位置修改examplebucket并行文件系统中objectname对象的内容。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.ModifyObjectRequest;import com.obs.services.model.ModifyObjectResult;import java.io.ByteArrayInputStream;public class ModifyObject001 { 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 { // 第一次上传 ModifyObjectRequest request = new ModifyObjectRequest(); request.setBucketName("examplebucket"); request.setObjectKey("objectname"); request.setPosition(0); request.setInput(new ByteArrayInputStream("HELLO OBS FIRST".getBytes())); ModifyObjectResult result = obsClient.modifyObject(request); // 第二次修改写 request.setPosition(0); request.setInput(new ByteArrayInputStream("hello obs second".getBytes())); result = obsClient.modifyObject(request); System.out.println("modifyObject successfully"); System.out.println("HTTP Code: " + result.getStatusCode()); } catch (ObsException e) { System.out.println("modifyObject 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("modifyObject failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 接口约束 您必须是并行文件系统拥有者或拥有修改写对象的权限,才能修改写对象。建议使用IAM或策略进行授权,如果使用IAM则需授予obs:bucket:PutObject权限,如果使用策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象并行文件系统不支持,如何创建并行文件系统请参考创建并行文件系统(Java SDK)。
  • 请求参数说明 表1 ListInventoryConfigurationRequest 参数名称 参数类型 是否必选 描述 bucketName String 是 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
  • 接口约束 您必须是桶拥有者或者拥有列举桶清单权限,才能列举桶清单。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetInventoryConfiguration权限,如果使用桶策略则需授予GetInventoryConfiguration权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 接口约束 待删除的桶必须为空,桶为空包含两方面含义: 桶内没有任何对象,没有对象的任何历史版本,没有对象的删除标记(删除标记也视作一个历史版本)。 桶内没有任何未合并的多段上传任务,即桶内不存在碎片。 您必须是桶拥有者或拥有删除桶的权限,才能删除桶。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:DeleteBucket权限,如果使用桶策略则需授予DeleteBucket权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 如果桶不为空(包含对象或分段上传碎片),则该桶无法被删除。 删除桶不是“幂等”操作,删除不存在的桶会报错。
  • 代码示例 本示例用于删除桶名为exampleBucket的桶。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.HeaderResponse;public class DeleteBucket001 { 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"; // 删除桶 HeaderResponse response = obsClient.deleteBucket(exampleBucket); System.out.println("DeleteBucket successfully"); System.out.println("StatusCode:"+response.getStatusCode()); System.out.println("RequestId:"+response.getRequestId()); } catch (ObsException e) { System.out.println("DeleteBucket 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("DeleteBucket failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全