云服务器内容精选

  • 代码示例 - 初始化MpcClient Endpoint调用前请您根据实际情况填写,并替换如下变量:"SDK_AK"、"SDK_SK"、{your endpoint string}和{your project id}。 package com.huaweicloud.sdk.test; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.http.HttpConfig; import com.huaweicloud.sdk.mpc.v1.MpcClient; public class InitMpc { private static HttpConfig httpConfig; private static BasicCredentials auth; private static String endpoint; private static MpcClient mpcClient; public static MpcClient getMpcClient() { httpConfig = HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true).withTimeout(3); //http代理设置,请根据实际情况设置 //httpConfig.withProxyHost("xxxxx").withProxyPort(xxxxx).withProxyUsername("xxxxx"). // withProxyPassword("xxxxx"); String ak = System.getenv("SDK_AK"); String sk = System.getenv("SDK_SK"); String projectId = System.getenv("PROJECT_ID"); endpoint = "https://mpc.region01.myhuaweicloud.com"; auth = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId); mpcClient = MpcClient.newBuilder() .withHttpConfig(httpConfig) .withCredential(auth) .withEndpoint(endpoint) .build(); return mpcClient; } }
  • 代码示例:按文件夹分组列举所有多版本对象 以下代码展示如何按文件夹分组,列举examplebucket桶下的所有多版本对象: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ListVersionsRequest; import com.obs.services.model.ListVersionsResult; import com.obs.services.model.VersionOrDeleteMarker; public class ListVersions007 { 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 { // 按文件夹分组列举所有对象 ListVersionsRequest request = new ListVersionsRequest("examplebucket", 1000); request.setDelimiter("/"); ListVersionsResult result = obsClient.listVersions(request); System.out.println("listVersions successfully"); System.out.println("Objects in the root directory:"); for (VersionOrDeleteMarker v : result.getVersions()) { System.out.println("Key:" + v.getKey()); System.out.println("Owner:" + v.getOwner()); System.out.println("isDeleteMarker:" + v.isDeleteMarker()); } listVersionsByPrefix(obsClient, result); } catch (ObsException e) { System.out.println("listVersions 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("listVersions failed"); // 其他异常信息打印 e.printStackTrace(); } }
  • 代码示例:递归列出子文件夹中多版本对象 递归列出子文件夹中多版本对象的函数listVersionsByPrefix的示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // 递归列出子文件夹中多版本对象 static void listVersionsByPrefix(ObsClient obsClient, ListVersionsResult result) throws ObsException { for (String prefix : result.getCommonPrefixes()) { System.out.println("Objects in folder [" + prefix + "]:"); ListVersionsRequest request = new ListVersionsRequest("examplebucket", 1000); request.setDelimiter("/"); request.setPrefix(prefix); result = obsClient.listVersions(request); for (VersionOrDeleteMarker v : result.getVersions()) { System.out.println("Key:" + v.getKey()); System.out.println("Owner:" + v.getOwner()); System.out.println("isDeleteMarker:" + v.isDeleteMarker()); } listVersionsByPrefix(obsClient, result); } } } 以上代码示例不包含文件夹中多版本对象数超过1000个的情况。 由于是需要列举出文件夹中的对象和子文件夹,且文件夹对象总是以“/”结尾,因此delimiter总是为“/”。 每次递归的返回结果中ListVersionsResult.getVersions包含的是文件夹中的多版本对象;ListVersionsResult.getCommonPrefixes包含的是文件夹的子文件夹。
  • 代码示例:列举文件夹中的所有多版本对象 OBS本身是没有文件夹的概念的,桶中存储的元素只有对象。文件夹对象实际上是一个大小为0且对象名以“/”结尾的对象,将这个文件夹对象名作为前缀,即可模拟列举文件夹中对象的功能。以下代码展示如何列举文件夹中的多版本对象: 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.ListVersionsRequest; import com.obs.services.model.ListVersionsResult; import com.obs.services.model.VersionOrDeleteMarker; public class ListVersions006 { 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 { // 列举文件夹中的所有对象 ListVersionsResult result; ListVersionsRequest request = new ListVersionsRequest("examplebucket", 100); // 设置文件夹对象名"dir/"为前缀 request.setPrefix("dir/"); do { result = obsClient.listVersions(request); System.out.println("listVersions successfully"); for (VersionOrDeleteMarker v : result.getVersions()) { System.out.println("Key:" + v.getKey()); System.out.println("Owner:" + v.getOwner()); System.out.println("isDeleteMarker:" + v.isDeleteMarker()); } request.setKeyMarker(result.getNextKeyMarker()); request.setVersionIdMarker(result.getNextVersionIdMarker()); } while (result.isTruncated()); } catch (ObsException e) { System.out.println("listVersions 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("listVersions failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 代码示例:分页列举全部多版本对象 以下代码展示如何指定起始位置列举examplebucket桶中对象名字典序在test之后的100个多版本对象。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ListVersionsRequest; import com.obs.services.model.ListVersionsResult; import com.obs.services.model.VersionOrDeleteMarker; public class ListVersions005 { 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 { // 分页列举全部对象 ListVersionsResult result; ListVersionsRequest request = new ListVersionsRequest("examplebucket", 100); do { result = obsClient.listVersions(request); System.out.println("listVersions successfully"); for (VersionOrDeleteMarker v : result.getVersions()) { System.out.println("Key:" + v.getKey()); System.out.println("Owner:" + v.getOwner()); System.out.println("isDeleteMarker:" + v.isDeleteMarker()); } request.setKeyMarker(result.getNextKeyMarker()); request.setVersionIdMarker(result.getNextVersionIdMarker()); } while (result.isTruncated()); } catch (ObsException e) { System.out.println("listVersions 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("listVersions failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 代码示例:指定前缀列举多版本对象 以下代码展示如何指定带有prefix前缀列举examplebucket桶中的多版本对象,最大数目为100个。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ListVersionsRequest; import com.obs.services.model.ListVersionsResult; import com.obs.services.model.VersionOrDeleteMarker; public class ListVersions003 { 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 { // 指定前缀列举 // 列举带有prefix前缀的100个多版本对象 ListVersionsRequest request = new ListVersionsRequest("examplebucket", 100); request.setPrefix("prefix"); ListVersionsResult result = obsClient.listVersions(request); System.out.println("listVersions successfully"); for (VersionOrDeleteMarker v : result.getVersions()) { System.out.println("Key:" + v.getKey()); System.out.println("Owner:" + v.getOwner()); System.out.println("isDeleteMarker:" + v.isDeleteMarker()); } } catch (ObsException e) { System.out.println("listVersions 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("listVersions failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 代码示例:指定起始位置列举多版本对象 以下代码展示如何指定起始位置列举examplebucket桶中对象名字典序在test之后的100个多版本对象。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ListVersionsRequest; import com.obs.services.model.ListVersionsResult; import com.obs.services.model.VersionOrDeleteMarker; public class ListVersions004 { 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 { // 指定起始位置列举 // 列举对象名字典序在"test"之后的100个多版本对象 ListVersionsRequest request = new ListVersionsRequest("examplebucket", 100); request.setKeyMarker("test"); ListVersionsResult result = obsClient.listVersions(request); System.out.println("listVersions successfully"); for (VersionOrDeleteMarker v : result.getVersions()) { System.out.println("Key:" + v.getKey()); System.out.println("Owner:" + v.getOwner()); System.out.println("isDeleteMarker:" + v.isDeleteMarker()); } } catch (ObsException e) { System.out.println("listVersions 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("listVersions failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 代码示例:简单列举多版本对象 以下代码展示如何简单列举examplebucket桶中的多版本对象,最多返回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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ListVersionsResult; import com.obs.services.model.VersionOrDeleteMarker; public class ListVersions001 { 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 { // 简单列举 ListVersionsResult result = obsClient.listVersions("examplebucket"); System.out.println("listVersions successfully"); for (VersionOrDeleteMarker v : result.getVersions()) { System.out.println("Key:" + v.getKey()); System.out.println("Owner:" + v.getOwner()); System.out.println("isDeleteMarker:" + v.isDeleteMarker()); } } catch (ObsException e) { System.out.println("listVersions 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("listVersions failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 代码示例:指定数目列举多版本对象 以下代码展示如何向examplebucket桶中指定数目列举多版本对象。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ListVersionsResult; import com.obs.services.model.VersionOrDeleteMarker; public class ListVersions002 { 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 { // 指定数目列举 ListVersionsResult result = obsClient.listVersions("examplebucket", 100); System.out.println("listVersions successfully"); for (VersionOrDeleteMarker v : result.getVersions()) { System.out.println("Key:" + v.getKey()); System.out.println("Owner:" + v.getOwner()); System.out.println("isDeleteMarker:" + v.isDeleteMarker()); } } catch (ObsException e) { System.out.println("listVersions 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("listVersions failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request ListVersionsRequest 必选 参数解释: 列举多版本对象请求参数,详见ListVersionsRequest。 表2 请求参数ListVersionsRequest成员说明 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 prefix String 可选 参数解释: 限定返回的对象名必须带有prefix前缀。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 keyMarker String 可选 参数解释: 列举多版本对象的起始位置,返回的对象列表将是对象名按照字典序排序后该参数以后的所有对象。 约束限制: 该字段仅用于多版本列举。 取值范围: 上次请求返回体的nextKeyMarker值。 默认取值: 无 maxKeys int 可选 参数解释: 列举多版本对象的最大数目,返回的对象列表将是按照字典顺序的最多前maxKeys个对象。 取值范围: 1~1000,当超出范围时,按照默认的1000进行处理。 默认取值: 1000 delimiter String 可选 参数解释: 将对象名进行分组的分隔符。如果指定了prefix,从prefix到第一次出现delimiter间具有相同字符串的对象名会被分成一组,形成一条CommonPrefixes;如果没有指定prefix,从对象名的首字符到第一次出现delimiter间具有相同字符串的对象名会被分成一组,形成一条CommonPrefixes。 例如,桶中有3个对象,分别为abcd、abcde、bbcde。如果指定delimiter为d,prefix为a,abcd、abcde会被分成一组,形成一条前缀为abcd的commonPrefix;如果只指定delimiter为d,abcd、abcde会被分成一组,形成一条前缀为abcd的commonPrefix,而bbcde会被单独分成一组,形成一条前缀为bbcd的commonPrefix。 对于并行文件系统,不携带此参数时默认列举是递归列举此目录下所有内容,会列举子目录。在大数据场景下(目录层级深、目录下文件多)的列举,建议设置[delimiter=/],只列举当前目录下的内容,不列举子目录,提高列举效率。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 versionIdMarker String 可选 参数解释: 与keyMarker配合使用,返回的对象列表将是对象名和版本号按照字典序排序后该参数以后的所有对象。keyMarker指定对象名,versionIdMarker指定该对象的具体版本号,两者共同确定对象版本。 约束限制: 该字段只适用于多版本列举场景。 如果versionIdMarker不是keyMarker的一个版本号,则该参数无效。 取值范围: 对象的版本号,即上次请求返回体的nextVersionIdMarker值。 默认取值: 无 encodingType String 可选 参数解释: 对响应中的部分元素进行指定类型的编码。如果 delimiter、keyMarker、prefix、nextKeyMarker 和 key 包含 xml 1.0 标准不支持的控制字符,可通过设置 encodingType 对响应中的 delimiter、keyMarker、prefix(包括 commonPrefixes 中的 prefix)、nextKeyMarker 和 key 进行编码。 取值范围: 可选值为url。 默认取值: 无,不设置则不编码。
  • 接口约束 您必须是桶拥有者或拥有列举桶内多版本对象的权限,才能列举桶内多版本对象。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:bucket:ListBucketVersions权限,如果使用桶策略则需授予ListBucketVersions权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 每次至多返回1000个多版本对象,如果指定桶包含的对象数量大于1000,可以采用分页列举的方式返回桶中所有多版本对象。列举时,ListVersionsResult.isTruncated为true表明本次没有返回全部对象,可以通过ListVersionsResult.getNextKeyMarker和ListVersionsResult.getNextVersionIdMarker获取下次列举的起始位置。
  • 接口约束 您必须是桶拥有者或拥有复制对象的权限,才能复制对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 用户有待复制的源对象的读权限。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 复制对象操作的请求需要通过头域携带拷贝的原桶和对象信息,不能携带消息实体。 支持同区域跨桶复制,不支持跨区域复制。 如果待复制的源对象是归档或深度归档存储类别,则必须先恢复源对象才能进行复制。
  • 分段复制请求参数 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request CopyPartRequest 必选 参数解释: 分段复制对象请求参数,详见CopyPartRequest。 表2 CopyPartRequest 参数名称 参数类型 是否必选 描述 sourceBucketName String 必选 参数解释: 源桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 sourceObjectKey String 必选 参数解释: 源对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 destinationBucketName String 必选 参数解释: 目标桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 destinationObjectKey String 必选 参数解释: 目标对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 byteRangeStart Long 可选 参数解释: 指定复制源对象的起始位置。 取值范围: 非负整数,单位:字节。 默认取值: 0 byteRangeEnd Long 可选 参数解释: 指定复制源对象的结束位置。 约束限制: 取值必须大于RangeStart,如果该值大于对象长度-1,实际仍取对象长度-1,单位为字节。 取值范围: 非负整数,单位:字节。 默认取值: 无 sseCHeaderSource SseCHeader 可选 参数解释: 服务端加密头信息,用于解密源对象。详情参见SseCHeader。 sseCHeaderDestination SseCHeader 可选 参数解释: 服务端加密头信息,用于加密目标对象。详情参见SseCHeader。 约束限制: 如果客户端的对象上传时,使用了客户提供的加密密钥进行服务端加密,当下载对象时,同样也必须在消息中提供密钥。 versionId String 可选 参数解释: 源对象的版本号。例如:G001117FCE89978B0000401205D5DC9A。如果源对象存在多个版本,可以指定该参数。 取值范围: 长度为32的字符串。 默认取值: 无 partNumber int 必选 参数解释: 段号。 取值范围: 取值范围是[1,10000]的非负整数。 默认取值: 无 uploadId String 必选 参数解释: 分段上传任务的ID,例如:000001648453845DBB78F2340DD460D8。 取值范围: 长度为32的字符串。 默认取值: 无 表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
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request BaseBucketRequest 必选 参数解释: 桶的基本信息请求参数列表,详见BaseBucketRequest。 表2 BaseBucketRequest 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
  • 代码示例 以下代码展示了如何获取examplebucket桶的生命周期规则。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 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.LifecycleConfiguration; public class GetBucketLifecycle001 { 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 { // 查看生命周期规则 LifecycleConfiguration config = obsClient.getBucketLifecycle("examplebucket"); System.out.println("getBucketLifecycle successfully"); for (LifecycleConfiguration.Rule rule : config.getRules()) { System.out.println(rule.getId()); System.out.println(rule.getPrefix()); for (LifecycleConfiguration.Transition transition : rule.getTransitions()) { System.out.println(transition.getDays()); System.out.println(transition.getStorageClass()); } System.out.println(rule.getExpiration() != null ? rule.getExpiration().getDays() : ""); for (LifecycleConfiguration.NoncurrentVersionTransition noncurrentVersionTransition : rule.getNoncurrentVersionTransitions()) { System.out.println(noncurrentVersionTransition.getDays()); System.out.println(noncurrentVersionTransition.getStorageClass()); } System.out.println( rule.getNoncurrentVersionExpiration() != null ? rule.getNoncurrentVersionExpiration().getDays() : ""); } } catch (ObsException e) { System.out.println("getBucketLifecycle 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("getBucketLifecycle failed"); // 其他异常信息打印 e.printStackTrace(); } } }