华为云用户手册

  • 代码示例:指定前缀列举对象 以下代码展示如何指定前缀prefix列举examplebucket桶下的对象,列举最大个数为100: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.ListObjectsRequest;import com.obs.services.model.ObjectListing;import com.obs.services.model.ObsObject;public class ListObjects003 { 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 { // 指定前缀列举 ListObjectsRequest request = new ListObjectsRequest("examplebucket"); // 设置列举带有prefix前缀的100个对象 request.setMaxKeys(100); request.setPrefix("prefix"); ObjectListing result = obsClient.listObjects(request); for (ObsObject obsObject : result.getObjects()) { System.out.println("listObjects successfully"); System.out.println("ObjectKey:" + obsObject.getObjectKey()); System.out.println("Owner:" + obsObject.getOwner()); } } catch (ObsException e) { System.out.println("listObjects 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("listObjects failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 代码示例:指定数目列举对象 以下代码展示如何指定数目列举examplebucket桶下的对象,列举最大个数为100: 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.ListObjectsRequest;import com.obs.services.model.ObjectListing;import com.obs.services.model.ObsObject;public class ListObjects002 { 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 { // 指定数目列举 ListObjectsRequest request = new ListObjectsRequest("examplebucket"); // 只列举100个对象 request.setMaxKeys(100); ObjectListing result = obsClient.listObjects(request); for (ObsObject obsObject : result.getObjects()) { System.out.println("listObjects successfully"); System.out.println("ObjectKey:" + obsObject.getObjectKey()); System.out.println("Owner:" + obsObject.getOwner()); } } catch (ObsException e) { System.out.println("listObjects 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("listObjects failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 接口约束 您必须是桶拥有者或拥有列举桶内对象的权限,才能列举桶内对象。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:bucket:ListBucket权限,如果使用桶策略则需授予ListBucket权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 每次至多返回1000个多版本对象,如果指定桶包含的对象数量大于1000,可以采用分页列举的方式返回桶中所有多版本对象。列举时,ListVersionsResult.isTruncated为true表明本次没有返回全部对象,可以通过ListVersionsResult.getNextKeyMarker和ListVersionsResult.getNextVersionIdMarker获取下次列举的起始位置。
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request ListObjectsRequest 必选 参数解释: 列举对象请求参数,详见ListObjectsRequest 。 表2 ListObjectsRequest 参数 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 prefix String 可选 参数解释: 列举桶内对象列表时,指定一个前缀,限定返回的对象名必须带有指定前缀。 例如,假设您拥有以下对象:logs/day1、logs/day2、logs/day3和ExampleObject.jpg。如果您将logs/指定为前缀,将返回以字符串“logs/”开头的三个对象。如果您指定空的前缀且请求中没有其他过滤条件,将返回桶中的所有对象。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 marker String 可选 参数解释: 列举桶内对象列表时,指定一个标识符,作为列举时的起始位置,从该标识符以后按对象名的字典顺序返回对象列表。 例如,您拥有以下对象:test/a、test/b、test/c、test/d。如果您将test/b指定为标识符,将返回test/c、test/d两个对象。 约束限制: 仅用于非多版本列举。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 maxKeys int 可选 参数解释: 列举对象的最大数目,返回的对象列表将是按照字典顺序的最多前MaxKeys个对象。 取值范围: 1~1000,当超出范围时,按照默认的1000进行处理。 默认取值: 1000 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。 对于并行文件系统,不携带此参数时默认列举是递归列举此目录下所有内容,会列举子目录。在大数据场景下(目录层级深、目录下文件多)的列举,建议设置[delimiter=/],只列举当前目录下的内容,不列举子目录,提高列举效率。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 encodingType String 可选 参数解释: 对响应中的部分元素进行指定类型的编码。如果 delimiter、marker、prefix、nextMarker 和 objectKey 包含xml 1.0标准不支持的控制字符,可通过设置 encodingType 对响应中的 delimiter、marker、prefix(包括commonPrefixes 中的 prefix)、nextMarker 和 objectKey 进行编码。 取值范围: 可选值为url。 默认取值: 无,不设置则不编码。
  • 代码示例:简单列举对象 以下代码展示如何简单列举examplebucket桶下的对象,最多返回1000个对象: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.ObjectListing;import com.obs.services.model.ObsObject;public class ListObjects001 { 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 { // 简单列举 ObjectListing result = obsClient.listObjects("examplebucket"); for (ObsObject obsObject : result.getObjects()) { System.out.println("listObjects successfully"); System.out.println("ObjectKey:" + obsObject.getObjectKey()); System.out.println("Owner:" + obsObject.getOwner()); } } catch (ObsException e) { System.out.println("listObjects 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("listObjects failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 返回结果说明 表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 参数解释: 对象数据流。 默认取值: 无
  • 接口约束 您必须是桶拥有者或拥有获取对象元数据的权限,才能获取自定义元数据。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:GetObject权限,如果使用桶策略则需授予GetObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 代码示例 本示例通过下载examplebucket桶中的objectname对象成功后,返回自定义元数据。示例代码如下: 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 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(); } }}
  • 请求参数说明 表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对象下载到本地文件localfile中。示例代码如下: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.DownloadFileRequest;import com.obs.services.model.DownloadFileResult;public class DownloadFile001 { 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 { DownloadFileRequest request = new DownloadFileRequest("examplebucket", "objectname"); // 设置下载对象的本地文件路径 request.setDownloadFile("localfile"); // 设置分段下载时的最大并发数 request.setTaskNum(5); // 设置分段大小为10MB request.setPartSize(10 * 1024 * 1024); // 开启断点续传模式 request.setEnableCheckpoint(true); // 进行断点续传下载 DownloadFileResult result = obsClient.downloadFile(request); System.out.println("downloadFile successfully"); System.out.println("Etag:" + result.getObjectMetadata().getEtag()); } catch (ObsException e) { System.out.println("downloadFile 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("downloadFile failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 功能说明 当下载大对象到本地文件时,经常出现因网络不稳定或程序崩溃导致下载失败的情况。失败后再次重新下载不仅浪费资源,而且当网络不稳定时仍然有下载失败的风险。断点续传下载接口能有效地解决此类问题引起的下载失败,其原理是将待下载的对象分成若干个分段分别下载,并实时地将每段下载结果统一记录在checkpoint文件中,仅当所有分段都下载成功时返回下载成功的结果,否则抛出异常提醒用户再次调用接口进行重新下载(重新下载时因为有checkpoint文件记录当前的下载进度,避免重新下载所有分段,从而节省资源提高效率)。 断点续传下载接口是利用范围下载(Java SDK)特性实现的,是对范围下载的封装和加强。 断点续传下载接口不仅能在失败重下时节省资源提高效率,还因其对分段进行并发下载的机制能加快下载速度,帮助用户快速完成下载业务;且其对用户透明,用户不用关心checkpoint文件的创建和删除、分段任务的切分、并发下载的实现等内部细节。
  • 接口约束 您必须是桶拥有者或拥有下载对象的权限,才能下载对象。建议使用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 参数解释: 对象数据流。 默认取值: 无
  • 接口约束 您必须是桶拥有者或拥有下载对象的权限,才能下载对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:GetObject权限,如果使用桶策略则需授予GetObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 代码示例 以下代码展示了如何重写响应头,并下载examplebucket桶中的objectname对象。 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.GetObjectRequest;import com.obs.services.model.ObjectRepleaceMetadata;import com.obs.services.model.ObsObject;public class GetObject005 { 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 { // 重写响应头 GetObjectRequest request = new GetObjectRequest("examplebucket", "objectname"); ObjectRepleaceMetadata replaceMetadata = new ObjectRepleaceMetadata(); replaceMetadata.setContentType("image/jpeg"); request.setReplaceMetadata(replaceMetadata); ObsObject obsObject = obsClient.getObject(request); System.out.println(obsObject.getMetadata().getContentType()); System.out.println("getObject successfully"); 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(); } }}
  • 代码示例 图片处理下载。以下代码展示对examplebucket桶里的objectname.jpg图片对象进行缩放、旋转然后进行下载。 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.GetObjectRequest;import com.obs.services.model.ObsObject;public class GetObject008 { 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 { // 发起图片处理请求并下载 // examplebucket为桶名,objectname.jpg为对象名 GetObjectRequest request = new GetObjectRequest("examplebucket", "objectname.jpg"); // 设置图片处理参数,对图片依次进行缩放、旋转 request.setImageProcess("image/resize,m_fixed,w_100,h_100/rotate,90"); ObsObject obsObject = obsClient.getObject(request); System.out.println("getObject successfully"); 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(); } }}
  • 返回结果说明 getObject返回结果如下 表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 参数解释: 对象数据流。 默认取值: 无
  • 接口约束 您必须是桶拥有者或拥有下载对象的权限,才能下载对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:GetObject权限,如果使用桶策略则需授予GetObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 所有的图片处理操作均不会修改存储在桶中的原图。 归档存储不支持图片处理。 深度归档存储不支持图片处理。 处理后的图片直接返回浏览器展示,不会保存在OBS中,也不会占用存储空间,不会产生存储费用。图片处理只收取处理的费用。
  • 请求参数说明 表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”的时间定义为段元数据创建时间。为了保证数据准确性,客户端需要加锁保证同一对象的同一个段上传的并发性。同一对象的不同段并发上传不需要加锁。
  • 代码示例 本示例用于获取下载examplebucket桶中objectname对象时的进度。示例代码如下: 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.GetObjectRequest;import com.obs.services.model.ObsObject;import com.obs.services.model.ProgressListener;import com.obs.services.model.ProgressStatus;import java.io.ByteArrayOutputStream;import java.io.InputStream;public class GetObject003 { 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 { // 获取下载进度 GetObjectRequest request = new GetObjectRequest("examplebucket", "objectname"); request.setProgressListener( new ProgressListener() { @Override public void progressChanged(ProgressStatus status) { // 获取下载平均速率 System.out.println("AverageSpeed:" + status.getAverageSpeed()); // 获取下载进度百分比 System.out.println("TransferPercentage:" + status.getTransferPercentage()); } }); // 每下载1MB数据反馈下载进度 request.setProgressInterval(1024 * 1024L); ObsObject obsObject = obsClient.getObject(request); // 读取对象内容 System.out.println("Object content:"); InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len; while ((len = input.read(b)) != -1) { bos.write(b, 0, len); } System.out.println("getObjectContent successfully"); System.out.println(new String(bos.toByteArray())); bos.close(); input.close(); } catch (ObsException e) { System.out.println("getObjectContent 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("getObjectContent failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 progressListener ProgressListener 必选 参数解释: 设置数据传输监听器,用于获取下载进度,详见ProgressListener。 表2 ProgressListener(传输进度接口)成员如下 方法名称 返回值类型 是否必选 描述 progressChanged void 必选 参数解释: 获取上传进度,详见progressChanged。 表3 progressChanged参数列表 参数名称 参数类型 是否必选 描述 status ProgressStatus 必选 参数解释: 传输进度数据.,详见ProgressStatus。 表4 ProgressStatus方法 方法名称 返回值类型 说明 getAverageSpeed() double 上传平均速率。 getInstantaneousSpeed() double 上传瞬时速率。 getTransferPercentage() int 上传进度百分比。 getNewlyTransferredBytes() long 新增的字节数。 getTransferredBytes() long 已传输的字节数。 getTotalBytes() long 待传输的字节数。
  • 接口约束 您必须是桶拥有者或拥有下载对象的权限,才能获取下载进度。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:GetObject权限,如果使用桶策略则需授予GetObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 支持获取下载进度的接口包括:流式下载、范围下载和断点续传下载。
  • 代码示例 本示例用于限定条件下载examplebucket桶中的objectname对象,并且指定该文件的修改时间必须在“2016-01-01”之后才能下载成功。 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.GetObjectRequest;import com.obs.services.model.ObsObject;import java.text.SimpleDateFormat;public class GetObject004 { 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 { // 限定条件下载 GetObjectRequest request = new GetObjectRequest("examplebucket", "objectname"); request.setRangeStart(0l); request.setRangeEnd(1000l); request.setIfModifiedSince(new SimpleDateFormat("yyyy-MM-dd").parse("2016-01-01")); ObsObject obsObject = obsClient.getObject(request); System.out.println("getObject successfully"); 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 参数解释: 对象数据流。 默认取值: 无
  • 代码示例:列举所有已上传的段 由于ObsClient.listParts只能列举至多1000个段,如果列举段数量大于1000个,可采用分页全部列举。示例如下: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 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 ListParts002 { 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 uploadId = "upload id from initiateMultipartUpload"; // 列举所有已上传的段,其中uploadId来自于initiateMultipartUpload ListPartsRequest request = new ListPartsRequest("examplebucket", "objectname"); request.setUploadId(uploadId); ListPartsResult result; do { 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()); } request.setPartNumberMarker(Integer.parseInt(result.getNextPartNumberMarker())); } while (result.isTruncated()); 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(); } }}
共100000条
提示

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