华为云用户手册

  • 加密过程与加密套件 OBS Java SDK提供了两个不同的加密套件生成器,分别是基于AES-CTR加密方法的CTRCipherGenerator与基于RSA + AES-CTR加密的CtrRSACipherGenerator。 使用CTRCipherGenerator上传对象时,用户需要提供一个用来加密数据的数据密钥,SDK将会针对每个对象随机生成一个初始值,并使用数据密钥与初始值加密对象,加密完成后将加密后文件上传至OBS,并将对应的初始值存储至对象元数据中。下载该对象时,用户需要提供对应的数据密钥,SDK会自动获取保存在对象元数据中的初始值,使用数据密钥与初始值解密对象并返回。下载时如果提供了与加密时不同的数据密钥,SDK也将返回不可用的解密后文件。 使用CtrRSACipherGenerator上传对象时,用户需要提供一个RSA 公钥,SDK会针对每个对象随机生成一个数据密钥和初始值,并使用数据密钥与初始值加密对象,加密完成后将加密后文件上传至OBS,随后会使用RSA密钥加密数据密钥,并将加密后的数据密钥与初始值存储至对象元数据中。下载该对象时,用户需要提供对应的RSA私钥,SDK会自动获取保存在对象元数据中的数据密钥与初始值,并使用私钥解密数据密钥,如果提供的私钥与上传时使用的密钥不匹配,将会抛出异常。解密成功后,SDK将会使用解密后的数据密钥与初始值解密对象并返回。
  • 示例代码 本示例用于为examplebucketname桶中exampleObjectKey对象设置对象标签。 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.BucketTagInfo.TagSet;import com.obs.services.model.ObjectTagResult;import com.obs.services.model.ObjectTaggingRequest;public class SetObjectTagging001 { 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实例 try (ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint)) { // 设置对象标签,请注意,该接口为全量设置接口,设置时注意会覆盖掉该对象之前的所有标签 String bucketName = "examplebucketname"; String objectKey = "exampleObjectKey"; String objectVersionId = ""; ObjectTagResult objectTagResult = new ObjectTagResult(); TagSet tagSet = new TagSet(); tagSet.addTag("tagKey1", "tagVal1"); tagSet.addTag("tagKey2", "tagVal2"); objectTagResult.setTagSet(tagSet); ObjectTaggingRequest objectTaggingRequest = new ObjectTaggingRequest(bucketName, objectKey, objectVersionId, objectTagResult); obsClient.setObjectTagging(objectTaggingRequest); System.out.println("SetObjectTagging successfully"); } catch (ObsException e) { System.out.println("SetObjectTagging 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("SetObjectTagging failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 如何进行分段上传?(Java SDK) 在上传文件时,您可以指定上传文件的某一段的数据来进行分段上传,步骤如下: 您需要以AK、SK、Endpoint先初始化一个客户端ObsClient。 指定桶名和对象名初始化一个InitiateMultipartUploadRequest,您可以通过InitiateMultipartUploadRequest.setMetadata接口设置将要上传的对象的元数据信息,然后通过ObsClient.initiateMultipartUpload接口初始化一个分段上传任务,这个接口会返回一个全局唯一标识(Upload ID),用于标识本次分段上传任务。 指定桶名和对象名初始化一个UploadPartRequest请求,通过UploadPartRequest.setUploadId接口设置该上传段所属的uploadId,setPartNumber接口设置该上传段的段号,setFile接口设置该上传段所属的将要上传的大文件,setPartSize接口设置该上传段的段大小;然后通过ObsClient.uploadPart接口上传该段,这个接口会返回该上传段的ETag值。 在所有分段上传完成后,指定桶名、对象名、uploadId、partEtags来初始化一个CompleteMultipartUploadRequest请求,然后通过ObsClient.completeMultipartUpload接口进行合并段操作。 详细操作可参见分段上传。 父主题: 常见问题(Java SDK)
  • 接口约束 您必须是桶拥有者或拥有删除桶的网站配置的权限,才能删除桶的网站配置。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:bucket:DeleteBucketWebsite权限,如果使用桶策略则需授予DeleteBucketWebsite权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request BaseBucketRequest 必选 参数解释: 桶基本信息参数列表,详见BaseBucketRequest。 表2 BaseBucketRequest 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
  • 代码示例 您可以通过obsClient.deleteBucketWebsite删除examplebucket桶的托管配置。以下代码展示了如何删除托管配置。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;public class DeleteBucketWebsite001{ 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 { // 清除桶的托管配置 obsClient.deleteBucketWebsite("examplebucket"); System.out.println("deleteBucketWebsite successfully"); } catch (ObsException e) { System.out.println("deleteBucketWebsite 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("deleteBucketWebsite failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 如何生成SSE-C方式的加密密钥(Java SDK) 以下代码展示了如何生成SSE-C方式的加密密钥,以及密钥的MD5值如何生成: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344 import java.nio.charset.Charset;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class SseCTool { public static void main(String[] args) { // 加密密钥示例:该密钥可根据业务需要自行修改,但长度必须为32个字符,即256 bit的字符串 String keyString = System.getenv("ACCESS_KEY_ID"); // 计算x-obs-server-side-encryption-customer-key头域 String customerKey = toBase64String(keyString.getBytes(Charset.forName("UTF-8"))); System.out.println("customer key is : " + customerKey); // 计算x-obs-server-side-encryption-customer-key-MD5头域 String customerKeyMD5 = computeMD5(fromBase64(customerKey)); System.out.println("md5 for customer key is : " + customerKeyMD5); } // 计算Base64字符串 public static String toBase64String(byte[] data) { java.util.Base64.Encoder encoder = java.util.Base64.getEncoder(); return new String(encoder.encode(data), Charset.forName("UTF-8")); } // 计算MD5字符串 public static String computeMD5(byte[] b64Data) { try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(b64Data); byte[] byteArray = md5.digest(); return toBase64String(byteArray); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return ""; } } public static byte[] fromBase64(String b64Data) { java.util.Base64.Decoder decoder = java.util.Base64.getDecoder(); return decoder.decode(b64Data.getBytes(Charset.forName("UTF-8"))); }} 父主题: 常见问题(Java SDK)
  • 如何进行分段下载?(Java SDK) 在下载对象时,您可以指定下载对象的某一范围内的数据进行分段下载,步骤如下: 您需要以AK、SK、Endpoint先初始化一个客户端ObsClient; 指定桶名和对象名初始化一个GetObjectRequest请求,您可以通过GetObjectRequest.setRangeStart和GetObjectRequest.setRangeEnd接口设置将要下载的对象数据的开始和结束范围; 通过ObsClient.getObject接口发送步骤2的GetObjectRequest请求来进行分段下载。 详细操作可参见范围下载。 父主题: 常见问题(Java SDK)
  • 如果桶内已存在同名对象,如何判定覆盖上传成功?(Java SDK) 上传完成后,您可以调用ObsClient.getObjectMetadata接口获取目标对象大小和最后修改时间,再与数据源进行比较: 如果两者大小一致且目标对象的最后修改时间晚于数据源的最后修改时间则表明上传成功,否则上传失败。 ObsClient.getObjectMetadata接口的使用可参见18.4-获取对象元数据。 父主题: 常见问题(Java SDK)
  • SDK自定义异常(Java SDK) SDK自定义异常(ObsException)是由ObsClient统一抛出的异常,继承自java.lang.RuntimeException类。通常是OBS服务端错误,包含OBS错误码、错误信息等,便于用户定位问题,并做出适当的处理。 ObsException通常包含以下错误信息: ObsException.getResponseCode():HTTP状态码。 ObsException.getErrorCode():OBS服务端错误码。 ObsException.getErrorMessage():OBS服务端错误描述。 ObsException.getErrorRequestId():OBS服务端返回的请求ID。 ObsException.getErrorHostId():请求的服务端ID。 ObsException.getResponseHeaders():HTTP响应头信息。 ObsException.printStackTrace(): 打印异常的详细堆栈 父主题: 异常处理(Java SDK)
  • 如何获取对象URL?(Java SDK) 将桶中的对象权限设置为匿名用户读取权限后,可通过对象的URL直接下载该对象。获取对象URL的方式如下: 方式一,接口查询,ObsClient上传对象后会返回PutObjectResult对象,通过调用该对象的getObjectUrl接口可获取上传对象的URL。示例代码如下: 1 2 3 4 5 6 7 8 9101112 // Endpoint以北京四为例,其他地区请按实际情况填写。String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.htmlString ak = System.getenv("ACCESS_KEY_ID");String sk = System.getenv("SECRET_ACCESS_KEY_ID");// 创建ObsClient实例ObsClient obsClient = new ObsClient(ak, sk, endPoint);// 调用putObject接口上传对象并获取其返回结果PutObjectResult result = obsClient.putObject("bucketname", "objectname", new File("localfile"));// 读取该已上传对象的URLSystem.out.println("\t" + result.getObjectUrl()); 方式二,按https://桶名. 域名 /文件夹目录层级/对象名的方式进行拼接。 如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级; 各区域对应的域名可以从这里的终端节点查看。 例如需访问区域为“华北-北京四”的桶名为“testbucket”中“test”文件夹下对象名为“test.txt”的对象,则该对象的URL为https://testbucket.obs.cn-north-4.myhuaweicloud.com/test/test.txt。 父主题: 常见问题(Java SDK)
  • 对于加密类型的对象如何使用URL进行下载?(Java SDK) 如果是SSE-KMS方式进行加密的对象,使用URL下载时服务端会自动解密。 如果对象是SSE-C方式进行加密的对象,由于解密需要设置请求头域,所以不能通过浏览器直接访问该对象。如果您是在编写代码来访问加密类型的对象,只需要为请求设置相应的头域信息即可,可参见代码示例:下载SSE-C加密类型的对象。 访问服务端加密对象必须使用HTTPS协议。 父主题: 常见问题(Java SDK)
  • 功能介绍 用户可以通过本接口获取对象(Object)的标签信息。 如果请求中不携带版本号(versionId),需要确保执行者有GetObjectTagging权限。如果请求中携带版本号(versionId),需要确保执行者有GetObjectTagging+GetObjectVersionTagging权限。缺省情况下只有对象的所有者可以执行此操作,也可以通过设置桶策略或用户策略给其他用户。 默认获取Object当前版本的标签信息。可以通过指定versionId参数来获取指定Object版本的标签信息。如果对应版本为删除标记(Delete Marker),则OBS将返回404 Not Found。 文件桶不支持该功能。
  • 日志路径 OBS Java SDK的日志路径是通过log4j2.xml指定的,默认存放于JDK系统变量user.dir所代表的路径下。通常包含三个日志文件: 文件名 说明 OBS-SDK.interface_north.log 北向日志,OBS Java SDK与用户第三方应用交互的日志记录。 OBS-SDK.interface_south.log 南向日志,OBS Java SDK与OBS服务端交互的日志记录。 OBS-SDK.access.log OBS客户端运行日志。
  • 日志级别 当系统出现问题需要定位且当前的日志无法满足要求时,可以通过修改日志的级别来获取更多的信息。其中TRACE日志信息最丰富,ERROR日志信息最少。 具体说明如下: OFF: 关闭级别,如果设置为这个级别,日志打印功能将被关闭。 TRACE:跟踪级别,如果设置为这个级别,将打印所有日志信息。通常不建议使用。 DEBUG:调试级别,如果设置为这个级别,除了打印INFO级别以上的信息外,还将打印每次HTTP/HTTPS请求和响应的头信息,鉴权算法计算出的StringToSign信息等。 INFO:信息级别,如果设置为这个级别,除了打印WARN级别以上的信息外,还将打印HTTP/HTTPS请求的耗时时间,ObsClient接口的耗时时间等。 WARN:告警级别,如果设置为这个级别,除了打印ERROR级别以上的信息外,还将打印一些关键事件的信息,如重试请求超过最大次数等。 ERROR:错误级别,如果设置为这个级别,仅打印发生异常时的错误信息。
  • 日志内容格式 SDK日志格式为:日志时间|线程号|日志级别|日志内容。示例如下: #南向日志 2017-08-21 17:40:07 133|main|INFO |HttpClient cost 157 ms to apply http request2017-08-21 17:40:07 133|main|INFO |Received expected response code: true2017-08-21 17:40:07 133|main|INFO |expected code(s): [200, 204].#北向日志2017-08-21 17:40:06 820|main|INFO |Storage|1|HTTP+XML|ObsClient||||2017-08-21 17:40:05|2017-08-21 17:40:06|||0|2017-08-21 17:40:07 136|main|INFO |Storage|1|HTTP+XML|setObjectAcl||||2017-08-21 17:40:06|2017-08-21 17:40:07|||0|2017-08-21 17:40:07 137|main|INFO |ObsClient [setObjectAcl] cost 312 ms
  • HTTP状态码(Java SDK) OBS服务端遵照HTTP规范,在接口调用完成均会返回标准的HTTP状态码,HTTP状态码分类以及OBS中常见的HTTP状态码如下: HTTP状态码分类: 分类 分类描述 1XX 信息,服务器收到请求,需要请求者继续执行操作,一般对客户调用函数不可见。 2XX 成功,操作被成功接收并处理。 3XX 重定向,需要进一步的操作以完成请求,一般对客户调用函数不可见。 4XX 客户端错误,请求包含语法错误或无法完成请求。 5XX 服务器错误,服务器在处理请求的过程中发生了错误。 OBS中常见的HTTP状态码及其含义: HTTP状态码 描述 常见原因 400 Bad Request 请求参数错误 请求参数不合法; 客户端携带MD5请求后一致性校验失败; 无效的参数(使用SDK时传递了不合法的参数); 无效的桶名(使用了不合法的桶名)。 403 Forbidden 拒绝访问 客户端请求中携带的签名和服务端计算出的签名不匹配(一般是AK/SK错误); 权限不足(账号对请求的资源无权限); 账号欠费; 桶的空间不足(出现在对桶设置了配额的场景); 无效的AK; 客户端时间和服务端时间相差过大(客户端所在机器的时间与NTP服务不同步)。 404 Not Found 请求的资源不存在 桶不存在; 对象不存在; 桶的策略配置不存在(桶CORS配置不存在、桶Policy配置不存在等); 分段上传任务不存在。 405 Method Not Allowed 请求的方法不支持 请求的方法/特性未在该桶所在的区域上线。 408 Request Timeout 请求超时 服务端与客户端Socket连接超时。 409 Conflict 请求冲突 在不同区域重复创建同名桶; 尝试删除非空桶。 500 Internal Server Error 服务端内部错误 服务端内部错误。 503 Service Unavaliable 服务不可用 服务端暂时不可访问。 父主题: 异常处理(Java SDK)
  • SDK公共响应头(Java SDK) 调用ObsClient类的相关接口成功后,均会返回公共响应头类: 即HeaderResponse类实例(或其子类实例),该类包含了HTTP/HTTPS的响应头信息。 处理公共响应头的示例代码如下: 1 2 3 4 5 6 7 8 91011121314 // Endpoint以北京四为例,其他地区请按实际情况填写。String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.htmlString ak = System.getenv("ACCESS_KEY_ID");String sk = System.getenv("SECRET_ACCESS_KEY_ID");// 创建ObsClient实例ObsClient obsClient = new ObsClient(ak, sk, endPoint);HeaderResponse response = obsClient.createBucket("bucketname");// 从公共响应头中获取request-idSystem.out.println("\t" + response.getRequestId());obsClient.close(); 父主题: 异常处理(Java SDK)
  • 代码示例 以下代码展示了如何通过设置versionId获取多版本对象查看examplebucket桶内对象objectname的多版本状态。 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.ObsObject;public class GetObject001 { 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 { // 设置versionId获取多版本对象 ObsObject obsObject = obsClient.getObject("examplebucket", "objectname", "versionid1"); 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(); } }}
  • 返回结果说明 表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的对应关系,详细信息请参见地区与终端节点。 对于存储类别为归档存储或深度归档存储的对象,需要确认对象的状态为“已恢复”才能对其进行下载。
  • 接口约束 您必须是桶拥有者或拥有删除桶标签的权限,才能删除桶标签。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:DeleteBucketTagging权限,如果使用桶策略则需授予DeleteBucketTagging权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request BaseBucketRequest 必选 参数解释: 桶基本信息参数列表,详见BaseBucketRequest。 表2 BaseBucketRequest 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
  • 代码示例 本示例用于通过ObsClient.deleteBucketTagging删除examplebucket桶的桶标签。以下代码展示了如何删除桶标签: 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;public class DeleteBucketTagging001{ 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 { // 删除桶标签 obsClient.deleteBucketTagging("examplebucket"); System.out.println("deleteBucketTagging successfully"); } catch (ObsException e) { System.out.println("deleteBucketTagging 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("deleteBucketTagging failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request BaseBucketRequest 必选 参数解释: 桶基本信息参数列表,详见BaseBucketRequest。 表2 BaseBucketRequest 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
  • 接口约束 您必须是桶拥有者或拥有获取桶的网站配置的权限,才能获取桶的网站配置。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetBucketWebsite权限,如果使用桶策略则需授予GetBucketWebsite权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 代码示例 您可以通过obsClient.getBucketWebsite查看examplebucket桶的托管配置。以下代码展示了如何查看托管配置。 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.RouteRule;import com.obs.services.model.WebsiteConfiguration;public class GetBucketWebsite001{ 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 { // 查看桶的托管配置 WebsiteConfiguration config = obsClient.getBucketWebsite("examplebucket"); System.out.println("Key:" + config.getKey()); System.out.println("Suffix:" + config.getSuffix()); for(RouteRule rule : config.getRouteRules()){ System.out.println("rule:" +rule); } System.out.println("getBucketWebsite successfully"); } catch (ObsException e) { System.out.println("getBucketWebsite 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("getBucketWebsite failed"); // 其他异常信息打印 e.printStackTrace(); } }}
  • 公网环境下如何提高上传大文件速度?(Java SDK) 在公网环境下对于超过100MB的大文件,建议通过分段上传方式上传。 分段上传是将单个对象拆分为一系列段分别上传,每个段都是对象数据的连续部分,您可以按照任意顺序上传段。如果其中某个段传输失败,可以重新传输该段且不会影响其他段。通过多线程并发上传同一对象的多个段,可大大提高传输效率。 具体代码样例可参见分段上传。 父主题: 常见问题(Java SDK)
  • 如何获取桶的静态网站访问地址?(Java SDK) 桶配置成静态网站托管模式后,可通过以下方式拼接桶的静态网站访问地址: https://桶名.静态网站托管域名 各区域对应的静态网站托管域名可以从这里查看。 例如区域为“华北-北京四”的桶名为“testbucket”的桶配置成静态网站托管模式后,该桶的静态网站访问地址为https://testbucket.obs-website.cn-north-4.myhuaweicloud.com。 父主题: 常见问题(Java SDK)
  • 接口约束 您必须是桶拥有者或拥有删除桶的生命周期配置的权限,才能删除桶的生命周期配置。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:PutLifecycleConfiguration权限,如果使用桶策略则需授予PutLifecycleConfiguration权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 Java SDK暂不支持指定规则ID删除,调用删除生命周期规则接口时,将删除桶内所有的生命周期规则。
共100000条