华为云用户手册

  • 代码示例:简单列举已上传的段(最多1000个) 通过initiateMultipartUpload获取的uploadId对examplebucket桶下的objectname对象进行上传段的简单列举,至多列举1000个段。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ListPartsRequest; import com.obs.services.model.ListPartsResult; import com.obs.services.model.Multipart; public class ListParts001 { 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 uploadId = "upload id from initiateMultipartUpload"; // 列举已上传的段,其中uploadId来自于initiateMultipartUpload ListPartsRequest request = new ListPartsRequest("examplebucket", "objectname"); request.setUploadId(uploadId); ListPartsResult result = obsClient.listParts(request); for (Multipart part : result.getMultipartList()) { // 分段号,上传时候指定 System.out.println("PartNumber:" + part.getPartNumber()); // 段数据大小 System.out.println("Size:" + part.getSize()); // 分段的ETag值 System.out.println("Etag:" + part.getEtag()); // 段的最后上传时间 System.out.println("LastModified:" + part.getLastModified()); } System.out.println("listParts successfully"); } catch (ObsException e) { System.out.println("listParts 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("listParts failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 功能说明 通过分段上传任务的ID,列举指定桶中已上传的段。 您可以列出特定多段上传任务或所有正在进行的多段上传任务的分段。列举已上传的段操作将返回特定多段上传任务中正在进行上传的段信息,单次最多列举1000个分段。如果多段上传中的段超过1000个,您必须发送一系列列举已上传的段请求以检索所有段。请注意,返回的分段列表不包括已合并的分段。 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。
  • 请求参数说明 表1 uploadPart请求参数列表 参数名称 参数类型 是否必选 描述 request UploadPartRequest 必选 参数解释: 上传段请求参数,详见UploadPartRequest。 表2 UploadPartRequest 参数名称 参数类型 是否必选 描述 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的字符串。 默认取值: 无 partNumber int 必选 参数解释: 段号。 取值范围: [1,10000],超出这个范围,OBS将返回400 Bad Request错误。 默认取值: 无 uploadId String 必选 参数解释: 分段上传任务的ID。任务ID可以通过初始化分段上传任务生成。例如:000001648453845DBB78F2340DD460D8。 约束限制: 长度为32的字符串。 默认取值: 无 input java.io.InputStream 可选 参数解释: 待上传对象的数据流。 约束限制: file为null,需要设置input字段不为空;input为null ,需要设置file字段不为空。二者需要选其一。 默认取值: 无 file java.io.File 可选 参数解释: 待上传对象的文件。 约束限制: file为null,需要设置input字段不为空;input为null ,需要设置file字段不为空。二者必须选其一。 默认取值: 无 offset long 可选 参数解释: 源文件中某一分段的起始偏移大小。流不支持该参数。 取值范围: 非负整数,不大于待上传对象的大小,单位:字节。 默认取值: 0 partSize Long 可选 参数解释: 当前段的长度。 约束限制: 上传段接口要求除最后一段以外,其他的段大小都要大于100KB。但是上传段接口并不会立即校验上传段的大小(因为不知道是否为最后一段),只有调用合并段接口时才会校验。 OBS 3.0的桶支持最小段的大小为100KB,OBS 2.0的桶支持最小段的大小为5MB。 取值范围: 100KB~5GB,单位:字节。 默认取值: 102400字节 sseCHeader SseCHeader 可选 参数解释: 服务端加密头域。详见SseCHeader。 默认取值: 无 attachMd5 boolean 可选 参数解释: 是否自动计算待上传数据的MD5值。为了保证数据在网络传输过程中不出现错误,可以通过设置UploadPartRequest.setAttachMd5为true来让SDK自动计算每段数据的MD5值(仅在数据源为本地文件时有效),并放到Content-MD5请求头中。OBS服务端会计算上传数据的MD5值与SDK计算的MD5值比较,保证数据完整性。 约束限制: attachMd5和contentMd5同时使用时,忽略attachMd5字段。 取值范围: true:自动计算上传数据的MD5值。 false:不自动计算上传数据的MD5值。 默认取值: false contentMd5 String 可选 参数解释: 待上传段数据的MD5值(经过Base64编码),是上传段数据内容的唯一标识,可以通过该值识别对象内容是否有变化。 约束限制: attachMd5和contentMd5同时使用时,忽略attachMd5字段。 取值范围: 长度为32的字符串。 默认取值: 无 progressListener ProgressListener 可选 参数解释: 上传进度,详见ProgressListener。 progressInterval long 可选 参数解释 上传进度反馈间隔。例子:1024 * 1024L,每上传1MB数据反馈上传进度。 默认取值: 100 * 1024L,单位:字节。 autoClose boolean 可选 参数解释: 上传完成后,自动关闭数据流。 取值范围: true:自动关闭数据流。 false:不自动关闭数据流。 默认取值: true 表3 SseCHeader 参数名称 参数类型 是否必选 描述 algorithm ServerAlgorithm 必选 参数解释: 表示服务端加密是SSE-C方式,对象使用SSE-C加密方式。 取值范围: 可选值:AES256,即选择SSE-C方式,使用高级加密标准(Advanced Encryption Standard,AES)加密对象。详见ServerAlgorithm。 默认取值: 无 sseAlgorithm SSEAlgorithmEnum 可选 参数解释: 加密算法。 约束限制: 只支持AES256。 取值范围: 详见SSEAlgorithmEnum。 默认取值: 无 sseCKey byte[] 必选 参数解释: SSE-C方式下加密使用的原始密钥,byte[]形式,该密钥用于加密对象。 默认取值: 无 sseCKeyBase64 String 可选 参数解释: SSE-C方式下的密钥,由原始密钥经过Base64编码后得到,该密钥用于加密对象。 默认取值: 无 表4 ServerAlgorithm 常量值 原始值 AES256 AES256 表5 SSEAlgorithmEnum 常量值 原始值 KMS kms AES256 AES256 表6 StorageClassEnum 常量名 原始值 说明 STANDARD STANDARD 标准存储。 WARM WARM 低频访问存储。 COLD COLD 归档存储。 DEEP_ARCHIVE DEEP_ARCHIVE 深度归档存储(受限公测) 表7 ProgressListener(传输进度接口)成员如下 方法名称 返回值类型 是否必选 描述 progressChanged void 必选 参数解释: 获取上传进度,详见progressChanged。 默认取值: 无 表8 progressChanged参数列表 参数名称 参数类型 是否必选 描述 status ProgressStatus 必选 参数解释: 传输进度数据,详见ProgressStatus。 默认取值: 无 表9 ProgressStatus方法 方法名称 返回值类型 说明 getAverageSpeed() double 上传平均速率。 getInstantaneousSpeed() double 上传瞬时速率。 getTransferPercentage() int 上传进度百分比。 getNewlyTransferredBytes() long 新增的字节数。 getTransferredBytes() long 已传输的字节数。 getTotalBytes() long 待传输的字节数。
  • 功能说明 初始化分段上传任务后,通过分段上传任务的ID,上传段到指定桶中。除了最后一段以外,其他段的大小范围是100KB~5GB;最后一段的大小范围是0~5GB。上传的段的编号也有范围限制,其范围是1~10000。 上传段时,除了指定上传ID,还必须指定段编号。您可以选择1和10000之间的任意段编号。段编号在您正在上传的对象中唯一地标示了段及其位置。如果您使用之前上传的段的同一段编号上传新段,则之前上传的段将被覆盖。无论您何时上传段,OBS都将在其响应中返回ETag标头。对于每个段上传任务,您必须记录每个段编号和ETag值。您在后续的合并请求中需要添加这些值以完成多段上传。 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。
  • 接口约束 您必须是桶拥有者或拥有上传段的权限,才能上传段。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 初始化上传段任务并上传一个或多个段之后,您必须合并段或取消多段上传任务,否则碎片会占用您的存储空间并产生一定的存储费用。 段任务中的partNumber是唯一的,重复上传相同partNumber的段,后一次上传会覆盖前一次上传内容。多并发上传同一对象的同一partNumber时,服务端遵循Last Write Win策略,但“Last Write”的时间定义为段元数据创建时间。为了保证数据准确性,客户端需要加锁保证同一对象的同一个段上传的并发性。同一对象的不同段并发上传不需要加锁。
  • 代码示例 以下代码展示了如何通过设置versionId复制sourceexamplebucket桶中sourceobjectname的多版本对象。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.CopyObjectRequest; public class CopyObject001 { 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 { // 复制多版本对象 CopyObjectRequest request = new CopyObjectRequest(); request.setSourceBucketName("sourceexamplebucket"); request.setSourceObjectKey("sourceobjectname"); // 设置要复制对象的版本号 request.setVersionId("versionid"); request.setDestinationBucketName("destexamplebucket"); request.setDestinationObjectKey("destobjectname"); obsClient.copyObject(request); System.out.println("copyObject successfully"); } catch (ObsException e) { System.out.println("copyObject 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("copyObject failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 接口约束 您必须是桶拥有者或拥有复制对象的权限,才能复制对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 用户有待复制的源对象的读权限。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 复制对象操作的请求需要通过头域携带拷贝的源桶和对象信息,不能携带消息实体。 支持同区域跨桶复制,不支持跨区域复制。 目标对象大小范围是[0, 5GB],如果源对象大小超过5GB,只能使用分段复制功能复制对象。 如果待复制的源对象是归档存储类别,则必须先恢复源对象才能进行复制。
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request ListMultipartUploadsRequest 必选 参数解释: 列举上传段请求参数,详见ListMultipartUploadsRequest。 表2 ListMultipartUploadsRequest 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 prefix String 可选 参数解释: 限定返回的分段上传任务中的对象名必须带有prefix前缀。 例如,假设您拥有以下对象:logs/day1、logs/day2、logs/day3和ExampleObject.jpg。如果您将logs/指定为前缀,将返回以字符串“logs/”开头的三个对象所在的分段上传任务。如果您指定空的前缀且请求中没有其他过滤条件,将返回桶中的所有分段上传任务。 约束限制: 长度大于0且不超过1024的字符串。 默认取值: 无 delimiter String 可选 参数解释: 对分段上传任务中的对象名进行分组的字符。通常与前缀prefix搭配使用,如果指定了prefix,从prefix到第一次出现delimiter间具有相同字符串的对象名会被分成一组,形成一条commonPrefixes;如果没有指定prefix,从对象名的首字符到第一次出现delimiter间具有相同字符串的对象名会被分成一组,形成一条commonPrefixes。 例如,桶中有3个对象,分别为abcd、abcde、bbcde。如果指定delimiter为d,prefix为a,abcd、abcde会被分成一组,形成一条前缀为abcd的commonPrefixes;如果只指定delimiter为d,abcd、abcde会被分成一组,形成一条前缀为abcd的commonPrefixes,而bbcde会被单独分成一组,形成一条前缀为bbcd的commonPrefixes。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 maxUploads Integer 可选 参数解释: 列举分段上传任务的最大数目。 约束限制: 当该参数超出1000时,按照默认的1000进行处理。 取值范围: 1~1000,单位:个。 默认取值: 1000 keyMarker String 可选 参数解释: 列举分段上传任务的起始位置。表示列举时返回指定的keyMarker之后的分段上传任务。 取值范围: 上次请求返回体的nextKeyMarker值。 默认取值: 无 uploadIdMarker String 可选 参数解释: 列举分段上传任务的起始位置(uploadId标识)。 约束限制: 只有与keyMarker参数一起使用时才有意义,即列举时返回指定keyMarker的uploadIdMarker之后的分段上传任务。 取值范围: 对象的分段上传任务ID,即上次请求返回体的nextUploadIdMarker值。 默认取值: 无 encodingType String 可选 参数解释: 响应中的部分元素进行指定类型的编码。如果 delimiter、keyMarker、prefix、nextKeyMarker 和 objectKey 包含xml 1.0标准不支持的控制字符,可通过设置 encodingType 对响应中的 delimiter、keyMarker、prefix(包括commonPrefixes 中的 prefix)、nextKeyMarker 和 objectKey 进行编码。 取值范围: 可选值为url。 默认取值: 无,不设置则不编码。
  • 接口约束 您必须是桶拥有者或拥有列举分段上传任务的权限,才能列举分段上传任务。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:ListBucketMultipartUploads权限,如果使用桶策略则需授予ListBucketMultipartUploads权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 默认情况下,允许桶所有者和多段上传任务的发起者执行此操作。除了默认情况之外,桶所有者可以允许其他委托人对桶执行ListBucketMultipartUploads操作。
  • 功能说明 列举指定桶中所有的初始化后还未合并或还未取消的分段上传任务。 通过列举桶中的多段上传任务,您可以获得已初始化多段上传任务的列表,已初始化多段上传任务是指初始化后还未合并以及未取消的多段上传任务。每个请求将返回最多1000个多段上传任务,如果正在进行的多段上传任务超过1000个,您需要发送其他请求以检索剩余的多段上传任务。 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。
  • 代码示例 本示例用于对examplebucket桶中的objectname对象做多段上传初始化,并获取uploadId。 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.InitiateMultipartUploadRequest; import com.obs.services.model.InitiateMultipartUploadResult; import com.obs.services.model.ObjectMetadata; public class InitiateMultipartUpload001 { 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 { InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest("examplebucket", "objectname"); ObjectMetadata metadata = new ObjectMetadata(); metadata.addUserMetadata("property", "property-value"); metadata.setContentType("text/plain"); request.setMetadata(metadata); InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request); String uploadId = result.getUploadId(); System.out.println("initiateMultipartUpload successfully"); System.out.println("uploadId:" + uploadId); } catch (ObsException e) { System.out.println("initiateMultipartUpload 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("initiateMultipartUpload failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 接口约束 您必须是桶拥有者或拥有初始化分段上传任务的权限,才能初始化分段上传任务。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 初始化上传段任务并上传一个或多个段之后,您必须合并段或取消多段上传任务,否则碎片会占用您的存储空间并产生一定的存储费用。
  • 代码示例 本示例通过下载examplebucket桶中的objectname对象成功后,返回自定义元数据。示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.GetObjectRequest; import com.obs.services.model.ObjectMetadata; import com.obs.services.model.ObsObject; import com.obs.services.model.PutObjectRequest; public class GetObject006 { 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 { // 获取自定义元数据 // 上传对象,设置自定义元数据 PutObjectRequest request = new PutObjectRequest("examplebucket", "objectname"); ObjectMetadata metadata = new ObjectMetadata(); metadata.addUserMetadata("property", "property-value"); request.setMetadata(metadata); obsClient.putObject(request); // 下载对象,获取对象自定义元数据 GetObjectRequest request1 = new GetObjectRequest("examplebucket", "objectname"); ObsObject obsObject = obsClient.getObject(request1); System.out.println("getObject successfully"); // 读取对象元数据 System.out.println(obsObject.getMetadata().getContentType()); // 获取名为property的自定义元数据 System.out.println(obsObject.getMetadata().getUserMetadata("property")); // 获取所有自定义元数据 System.out.println("allUserMetadata:" + metadata.getAllMetadata()); obsObject.getObjectContent().close(); } catch (ObsException e) { System.out.println("getObject 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("getObject failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 接口约束 您必须是桶拥有者或拥有获取对象元数据的权限,才能获取自定义元数据。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:GetObject权限,如果使用桶策略则需授予GetObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 返回结果说明 表13 ObsObject 参数名称 参数类型 描述 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的字符串。 默认取值: 无 owner Owner 参数解释: 所有者,详见Owner。 metadata ObjectMetadata 参数解释: 对象元数据,详见ObjectMetadata。 objectContent InputStream 参数解释: 对象数据流。 默认取值: 无
  • 数据规划 表1 规划数据 类别 规划项 规划值 VPC 待互通子网 192.168.0.0/16 VPN网关 互联子网 用于VPN网关和VPC通信,请确保选择的互联子网存在4个及以上可分配的IP地址。 192.168.2.0/24 HA模式 双活 EIP地址 EIP地址在购买EIP时由系统自动生成,VPN网关默认使用2个EIP。本示例假设EIP地址生成如下: 主EIP:11.xx.xx.11 主EIP2:11.xx.xx.12 VPN连接 Tunnel接口地址 用于VPN网关和对端网关建立IPsec隧道,配置时两边需要互为镜像。 VPN连接1:169.254.70.1/30 VPN连接2:169.254.71.1/30 数据中心 待互通子网 172.16.0.0/16 对端网关 网关IP地址 网关IP地址由运营商统一分配。本示例假设网关IP地址如下: 22.xx.xx.22 Tunnel接口地址 VPN连接1:169.254.70.2/30 VPN连接2:169.254.71.2/30
  • 操作流程 通过VPN实现数据中心和VPC互通的操作流程如图3所示。 图3 操作流程 表2 操作流程说明 序号 步骤 说明 1 步骤一:创建VPN网关 VPN网关需要绑定两个EIP作为出口公网IP。 如果您已经购买EIP,则此处可以直接绑定使用。 2 步骤二:创建对端网关 添加数据中心的VPN设备为对端网关。 3 步骤三:创建第一条VPN连接 VPN网关的主EIP和对端网关组建第一条VPN连接。 4 步骤四:创建第二条VPN连接 VPN网关的主EIP2和对端网关组建第二条VPN连接。 第二条VPN连接的路由模式、预共享密钥、IKE/IPsec策略建议和第一条VPN连接配置保持一致。 5 步骤五:配置对端网关设备 对端网关配置的本端隧道接口地址/对端隧道接口地址需要和华为云VPN连接配置互为镜像配置。 对端网关配置的路由模式、预共享密钥、IKE/IPsec策略需要和华为云VPN连接配置保持一致。 6 步骤六:验证网络互通情况 登录E CS ,执行ping命令,验证网络互通情况。
  • 场景描述 由于业务发展,企业A需要将数据中心和VPC的数据进行互通。此时企业A可以通过VPN服务创建数据中心和VPC的连接,实现云上和云下数据互通。 如果用户数据中心仅有一个对端网关,且对端网关只能配置一个IP地址,推荐VPN网关使用双活模式,组网如图1所示。 双活模式下,如果连接1链路故障,流量自动切换至连接2进行传输,企业业务不受影响;连接1恢复正常后,VPN仍使用连接2进行数据交互。 图1 双活模式 如果用户数据中心存在两个对端网关,或一个对端网关可以配置两个IP地址,推荐VPN网关使用主备模式,组网如图2所示。 主备模式下,连接1和连接2互为主备,主链路为连接1,备链路为连接2。默认情况下流量仅通过主链路进行传输,如果主链路故障,流量自动切换至备链路进行传输,企业业务不受影响;主链路恢复正常后,VPN回切至主链路进行数据交互。 图2 主备模式
  • 操作流程 通过VPN实现客户端远程接入VPC的操作流程如图 操作流程所示。 图1 操作流程 表2 操作流程说明 序号 步骤 说明 1 步骤一:创建VPN网关 VPN网关需要绑定EIP作为出口公网IP。 如果您已经购买EIP,则此处可以直接绑定使用。 2 步骤二:配置服务端 指定客户端需要访问的网段(本端网段)和客户端访问时使用的网段(客户端网段)。 选择服务端证书和客户端认证类型,用于建立VPN连接时的身份认证。 客户端认证类型支持“证书认证”和“口令认证(本地)”两种方式。 配置VPN连接的SSL参数(协议、端口、认证算法、加密算法等)。 3 步骤三:配置客户端 从管理控制台下载客户端配置,对配置文件进行修改后导入对应的VPN客户端软件。 4 步骤四:验证连通性 打开客户端设备的命令行窗口,执行ping命令,验证连通性。
  • 数据规划 表1 规划数据 类别 规划项 规划值 VPC 待互通子网 192.168.0.0/16 VPN网关 互联子网 用于VPN网关和VPC通信,请确保选择的互联子网存在3个及以上可分配的IP地址。 192.168.2.0/24 最大连接数 10 EIP地址 EIP地址在购买EIP时由系统自动生成。 本示例假设EIP地址生成如下:11.xx.xx.11 服务端 本端网段 192.168.1.0/24 服务端证书 cert-server(使用 云证书管理服务 托管的服务端证书名称) SSL参数 协议:TCP 端口:443 加密算法:AES-128-GCM 认证算法:SHA256 是否压缩:否 客户端 客户端网段 172.16.0.0/16 客户端认证类型 默认选择“口令认证(本地)”。 用户组 名称:Testgroup_01 用户 名称:Test_01 密码:请根据实际配置 所属用户组:Testgroup_01 访问策略 名称:Policy_01 目的网段:192.168.1.0/24 用户组:Testgroup_01
  • 操作流程 通过VPN实现数据中心和VPC互通的操作流程如图3所示。 图3 操作流程 表2 操作流程说明 序号 步骤 说明 1 步骤一:创建VPN网关 VPN网关需要绑定两个EIP作为出口公网IP。 如果您已经购买EIP,则此处可以直接绑定使用。 2 步骤二:创建对端网关 添加数据中心的VPN设备为对端网关。 3 步骤三:创建第一条VPN连接 VPN网关的主EIP和对端网关组建第一条VPN连接。 4 步骤四:创建第二条VPN连接 VPN网关的主EIP2和对端网关组建第二条VPN连接。 第二条VPN连接的路由模式、预共享密钥、IKE/IPsec策略建议和第一条VPN连接配置保持一致。 5 步骤五:配置对端网关设备 对端网关配置的本端隧道接口地址/对端隧道接口地址需要和华为云VPN连接配置互为镜像配置。 对端网关配置的路由模式、预共享密钥、IKE/IPsec策略需要和华为云VPN连接配置保持一致。 6 步骤六:验证网络互通情况 登录ECS,执行ping命令,验证网络互通情况。
  • 场景描述 由于业务发展,企业A需要将数据中心和VPC的数据进行互通。此时企业A可以通过VPN服务创建数据中心和VPC的连接,实现云上和云下数据互通。 如果用户数据中心仅有一个对端网关,且对端网关只能配置一个IP地址,推荐VPN网关使用双活模式,组网如图1所示。 双活模式下,如果连接1链路故障,流量自动切换至连接2进行传输,企业业务不受影响;连接1恢复正常后,VPN仍使用连接2进行数据交互。 图1 双活模式 如果用户数据中心存在两个对端网关,或一个对端网关可以配置两个IP地址,推荐VPN网关使用主备模式,组网如图2所示。 主备模式下,连接1和连接2互为主备,主链路为连接1,备链路为连接2。默认情况下流量仅通过主链路进行传输,如果主链路故障,流量自动切换至备链路进行传输,企业业务不受影响;主链路恢复正常后,VPN回切至主链路进行数据交互。 图2 主备模式
  • 数据规划 表1 规划数据 类别 规划项 规划值 VPC 待互通子网 192.168.0.0/16 VPN网关 互联子网 用于VPN网关和VPC通信,请确保选择的互联子网存在4个及以上可分配的IP地址。 192.168.2.0/24 HA模式 双活 EIP地址 EIP地址在购买EIP时由系统自动生成,VPN网关默认使用2个EIP。本示例假设EIP地址生成如下: 主EIP:11.xx.xx.11 主EIP2:11.xx.xx.12 VPN连接 Tunnel接口地址 用于VPN网关和对端网关建立IPsec隧道,配置时两边需要互为镜像。 VPN连接1:169.254.70.1/30 VPN连接2:169.254.71.1/30 数据中心 待互通子网 172.16.0.0/16 对端网关 网关IP地址 网关IP地址由运营商统一分配。本示例假设网关IP地址如下: 22.xx.xx.22 Tunnel接口地址 VPN连接1:169.254.70.2/30 VPN连接2:169.254.71.2/30
  • VPC、VPN网关、VPN连接之间有什么关系? VPC,即云上私有专用网络,同一Region中可以创建多个VPC,且VPC之间相互隔离。一个VPC内可以划分多个子网网段。 VPN网关,基于VPC创建,是VPN连接的接入点。一个VPC下支持购买多个VPN网关,每个网关可以创建多个VPN连接。 VPN连接,基于VPN网关创建,用于连通VPC子网和用户数据中心(或其它Region的VPC)子网,即每个VPN连接连通了一个用户侧数据中心的网关。 VPN连接的数量与VPN连接的本端子网和远端子网的数量无关,仅与用户VPC需要连通的用户数据中心(或其它Region的VPC)的数量有关,已创建的VPN连接的数量即VPN连接列表中展示的数量(一个条目即一个VPN连接),也可以在VPN网关中查看当前网关已创建的VPN连接数量。 父主题: 产品咨询
  • IPsec VPN适用连接典型组网结构有哪些? VPN是打通的点到点的网络,实现两点之间的私网互访,不能打通点到端的网络。 适用典型场景: 不同region之间创建VPN,实现跨region的VPC间网络互访 华为云与友商云创建VPN,如与阿里云的VPC间网络互访 华为云与客户IDC机房打通VPN,实现线上VPC与线下的IDC网络互访 VPN HUB功能,结合对等连接和CC实现云下IDC与云上多VPC网络互访 结合SNAT实现跨云访问特定IP 不适用的典型场景: 相同region的两个VPC不可以使用VPN,推荐使用对等连接打通 不可与家庭PPPoE拨号网络建立VPN连接 不可与4G/5G路由器建立VPN连接 不可与个人终端建立VPN连接 父主题: 产品咨询
  • VPC、VPN网关、VPN连接之间有什么关系? VPC,即云上私有专用网络,同一Region中可以创建多个VPC,且VPC之间相互隔离。一个VPC内可以划分多个子网网段。 VPN网关,基于VPC创建,是VPN连接的接入点。一个VPC仅能购买一个VPN网关,每个网关可以创建多个VPN连接。 VPN连接,基于VPN网关创建,用于连通VPC子网和用户数据中心(或其它Region的VPC)子网,即每个VPN连接连通了一个用户侧数据中心的网关。 VPN连接的数量与VPN连接的本端子网和远端子网的数量无关,仅与用户VPC需要连通的用户数据中心(或其它Region的VPC)的数量有关,已创建的VPN连接的数量即VPN连接列表中展示的数量(一个条目即一个VPN连接),也可以在VPN网关中查看当前网关已创建的VPN连接数量。 父主题: 产品咨询
  • VPC、VPN网关、VPN连接之间有什么关系? VPC,即云上私有专用网络,同一Region中可以创建多个VPC,且VPC之间相互隔离。一个VPC内可以划分多个子网网段。 VPN网关,基于VPC创建,是VPN连接的接入点。一个VPC仅能购买一个VPN网关,每个网关可以创建多个VPN连接。 VPN连接,基于VPN网关创建,用于连通VPC子网和用户数据中心(或其它Region的VPC)子网,即每个VPN连接连通了一个用户侧数据中心的网关。 VPN连接的数量与VPN连接的本端子网和远端子网的数量无关,仅与用户VPC需要连通的用户数据中心(或其它Region的VPC)的数量有关,已创建的VPN连接的数量即VPN连接列表中展示的数量(一个条目即一个VPN连接),也可以在VPN网关中查看当前网关已创建的VPN连接数量。 父主题: Console与页面使用
  • VPC、VPN网关、VPN连接之间有什么关系? VPC,即云上私有专用网络,同一Region中可以创建多个VPC,且VPC之间相互隔离。一个VPC内可以划分多个子网网段。 VPN网关,基于VPC创建,是VPN连接的接入点。一个VPC下支持购买多个VPN网关,每个网关可以创建多个VPN连接。 VPN连接,基于VPN网关创建,用于连通VPC子网和用户数据中心(或其它Region的VPC)子网,即每个VPN连接连通了一个用户侧数据中心的网关。 VPN连接的数量与VPN连接的本端子网和远端子网的数量无关,仅与用户VPC需要连通的用户数据中心(或其它Region的VPC)的数量有关,已创建的VPN连接的数量即VPN连接列表中展示的数量(一个条目即一个VPN连接),也可以在VPN网关中查看当前网关已创建的VPN连接数量。 父主题: Console与页面使用
  • 为什么需要NQA 随着运营商增值业务的开展,用户和运营商对QoS(Quality of Service)的相关要求越来越高,特别是在传统的IP网络承载语音和视频业务后,运营商与客户之间签订SLA(Service Level Agreement)成为普遍现象。 为了让用户看到承诺的带宽是否达到需求,运营商需要提供相关的时延、抖动、丢包率等相关的统计参数,以及时了解网络的性能状况。传统的网络性能分析方法(如Ping、Tracert等)已经不能满足用户对业务多样性和监测实时性的要求。NQA可以实现对网络运行状况的准确测试,输出统计信息。NQA可以监测网络上运行的多种协议的性能,使网络运营商能够实时采集到各种网络运行指标,例如:HTTP的总时延、TCP连接时延、DNS解析时延、文件传输速率、FTP连接时延、DNS解析错误率等。通过对这些指标进行控制,网络运营商可以为用户提供不同等级的网络服务。同时,NQA也是网络故障诊断和定位的有效工具。
  • 静态路由与NQA联动 静态路由本身并没有检测机制,如果非本机直连链路发生了故障,静态路由不会自动从IP路由表中自动删除,需要网络管理员介入,这就无法保证及时进行链路切换,可能造成较长时间的业务中断。 使用静态路由模式创建VPN连接时,为了避免出现以上问题,需要使用NQA来检测静态路由所在的链路,确保VPN连接稳定性。使能NQA时需要确保对端网关设备支持ICMP功能,且对端接口地址已在对端网关上正确配置,否则可能导致流量不通。
共100000条