云服务器内容精选

  • 接口约束 您必须是并行文件系统拥有者或拥有重命名文件的权限,才能重命名文件。建议使用 IAM 或策略进行授权,如果使用IAM则需授予obs:bucket:PutObject权限,如果使用策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象桶不支持。 重命名时,如果源对象不存在,则会报错(HTTP状态码为404)。
  • 接口约束 您必须是桶拥有者或拥有设置对象元数据的权限,才能设置对象元数据。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:ModifyObjectMetaData权限,如果使用桶策略则需授予ModifyObjectMetaData权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。 当桶开启多版本控制时,最新版本的对象支持设置元数据,历史版本的对象不支持设置元数据。 对于存储类别为归档或深度归档存储的对象,不能对其设置对象的元数据。
  • 接口功能 该接口用于预约周期会议。注意事项:1、该接口在已登录状态下才能调用。2、该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 3、会议开始时间必须晚于当前时间,会议时长应大于15分钟。4、携带与会者入会的时候需要传入attendees。5、周期会议最大跨度一年,会议数量不超过50,超过则只预约前50个会议。 6、回调函数中会返回预约成功后的会议详情,详见HwmConfDetail结构体表。如果参数内只有会议id有值则获取会议详情失败。
  • 接口功能 该接口用于设置语言,默认是中文。注意事项:1、实现自定义语言,windows平台要求在 \HwmSdk\sdkResources\language\ 目录下创建对应的国际化文件,如新增阿拉伯语则可以创建 \ar\temp.js;mac平台要求在 /HWMUISDK.framework/Versions/A/Frameworks/WKLanguage.framework/Resources/ 目录下创建对应的国际化文件,如新增阿拉伯语则可以创建 ar.lproj/Localizable.strings。通过该接口设置的语言应与系统当前语言保持一致。
  • 代码示例:递归列出子文件夹中对象 递归列出子文件夹中对象的函数listObjectsByPrefix的示例代码如下: 1 2 3 4 5 6 7 8 9101112131415 // 递归列出子文件夹中对象 static void listObjectsByPrefix(ObsClient obsClient, ListObjectsRequest request, ObjectListing result) throws ObsException { for (String prefix : result.getCommonPrefixes()) { System.out.println("Objects in folder [" + prefix + "]:"); request.setPrefix(prefix); result = obsClient.listObjects(request); for (ObsObject obsObject : result.getObjects()) { System.out.println("ObjectKey:" + obsObject.getObjectKey()); System.out.println("Owner:" + obsObject.getOwner()); } listObjectsByPrefix(obsClient, request, result); } }}
  • 代码示例:分页列举全部对象 以下代码展示分页列举examplebucket桶下的全部对象,设置每页最多列举100个对象: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 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 ListObjects005 { 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"); // 设置每页100个对象 request.setMaxKeys(100); ObjectListing result; do { 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()); } request.setMarker(result.getNextMarker()); } while (result.isTruncated()); } 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(); } }}
  • 代码示例:列举文件夹中的对象 OBS本身是没有文件夹的概念的,桶中存储的元素只有对象。文件夹对象实际上是一个大小为0且对象名以“/”结尾的对象,将这个文件夹对象名作为前缀,即可模拟列举文件夹中对象的功能。以下代码展示如何列举文件夹中的对象: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 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 ListObjects006 { 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"); // 设置文件夹对象名"dir/"为前缀 request.setPrefix("dir/"); request.setMaxKeys(100); ObjectListing result; do { 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()); } request.setMarker(result.getNextMarker()); } while (result.isTruncated()); } 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桶下的所有对象: 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.ListObjectsRequest;import com.obs.services.model.ObjectListing;import com.obs.services.model.ObsObject;public class ListObjects007 { 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"); request.setMaxKeys(1000); // 设置文件夹分隔符"/" request.setDelimiter("/"); ObjectListing result = obsClient.listObjects(request); System.out.println("Objects in the root directory:"); for (ObsObject obsObject : result.getObjects()) { System.out.println("listObjects successfully"); System.out.println("ObjectKey:" + obsObject.getObjectKey()); System.out.println("Owner:" + obsObject.getOwner()); } listObjectsByPrefix(obsClient, request, result); } 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 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 ListObjects004 { 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"); // 设置列举对象名字典序在"test"之后的100个对象 request.setMaxKeys(100); request.setMarker("test"); 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(); } }}
  • 代码示例:指定前缀列举对象 以下代码展示如何指定前缀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("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"); // 设置列举带有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(); } }}
  • 接口约束 您必须是桶拥有者或拥有列举桶内对象的权限,才能列举桶内对象。建议使用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(); } }}
  • 代码示例:指定数目列举对象 以下代码展示如何指定数目列举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(); } }}
  • 指定前缀列举 以下代码展示如何指定前缀列举对象: // 认证用的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 endPoint = "https://your-endpoint";// 创建ObsClient实例final ObsClient obsClient = new ObsClient(ak, sk, endPoint);ListObjectsRequest request = new ListObjectsRequest("bucketname");// 设置列举带有prefix前缀的100个对象request.setMaxKeys(100);request.setPrefix("prefix");ObjectListing result = obsClient.listObjects(request);for(ObsObject obsObject : result.getObjects()){ Log.i("ListObjects","\t" + obsObject.getObjectKey()); Log.i("ListObjects","\t" + obsObject.getOwner());}