华为云用户手册

  • 列举文件夹中的所有对象 OBS本身是没有文件夹的概念的,桶中存储的元素只有对象。文件夹对象实际上是一个大小为0且对象名以“/”结尾的对象,将这个文件夹对象名作为前缀,即可模拟列举文件夹中对象的功能。以下代码展示如何列举文件夹中的对象: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AC CES S_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ListObjectsRequest request = new ListObjectsRequest("bucketname"); // 设置文件夹对象名"dir/"为前缀 request.setPrefix("dir/"); request.setMaxKeys(1000); ObjectListing result; do{ result = obsClient.listObjects(request); for (ObsObject obsObject : result.getObjects()) { Log.i("ListObjects","\t" + obsObject.getObjectKey()); Log.i("ListObjects","\t" + obsObject.getOwner()); } request.setMarker(result.getNextMarker()); }while(result.isTruncated());
  • 指定起始位置列举 以下代码展示如何指定起始位置列举对象: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String 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"); // 设置列举对象名字典序在"test"之后的100个对象 request.setMaxKeys(100); request.setMarker("test"); ObjectListing result = obsClient.listObjects(request); for(ObsObject obsObject : result.getObjects()){ Log.i("ListObjects","\t" + obsObject.getObjectKey()); Log.i("ListObjects","\t" + obsObject.getOwner()); }
  • 简单列举 以下代码展示如何简单列举对象,最多返回1000个对象: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String 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); ObjectListing result = obsClient.listObjects("bucketname"); for(ObsObject obsObject : result.getObjects()){ Log.i("ListObjects", "\t" + obsObject.getObjectKey()); Log.i("ListObjects","\t" + obsObject.getOwner()); } 每次至多返回1000个对象,如果指定桶包含的对象数量大于1000,则返回结果中ObjectListing.isTruncated为true表明本次没有返回全部对象,并可通过ObjectListing.getNextMarker获取下次列举的起始位置。 如果想获取指定桶包含的所有对象,可以采用分页列举的方式。
  • 指定数目列举 以下代码展示如何指定数目列举对象: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String 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"); // 只列举100个对象 request.setMaxKeys(100); ObjectListing result = obsClient.listObjects(request); for(ObsObject obsObject : result.getObjects()){ Log.i("ListObjects","\t" + obsObject.getObjectKey()); Log.i("ListObjects","\t" + obsObject.getOwner()); }
  • 指定前缀列举 以下代码展示如何指定前缀列举对象: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String 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()); }
  • 追加上传 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 追加上传可实现对同一个对象追加数据内容的功能。您可以通过ObsClient.appendObject进行追加上传。示例代码如下: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 第一次追加上传 AppendObjectRequest request = new AppendObjectRequest(); request.setBucketName("bucketname"); request.setObjectKey("objectname"); request.setPosition(0L); request.setInput(new ByteArrayInputStream("Hello OBS".getBytes())); AppendObjectResult result = obsClient.appendObject(request); // 第二次追加上传 request.setPosition(result.getNextPosition()); request.setInput(new ByteArrayInputStream("Hello OBS Again".getBytes())); result = obsClient.appendObject(request); Log.i("AppendObject", "NextPosition:" + result.getNextPosition()); Log.i("AppendObject", "Etag:" + result.getEtag()); // 通过获取对象属性接口获取下次追加上传的位置 ObjectMetadata metadata = obsClient.getObjectMetadata("bucketname", "objectname"); Log.i("AppendObject", "NextPosition from metadata:" + metadata.getNextPosition()); ObsClient.putObject上传的对象可覆盖ObsClient.appendObject上传的对象,覆盖后对象变为普通对象,不可再进行追加上传。 第一次调用追加上传时,若已存在同名的普通对象,则会抛出异常(HTTP状态码为409)。 追加上传返回的ETag是当次追加数据内容的ETag,不是完整对象的ETag; 单次追加上传的内容不能超过5GB,且最多支持10000次追加上传。 追加上传成功后,可通过AppendObjectResult.getNextPosition获取下次追加上传的位置;或者通过ObsClient.getObjectMetadata接口获取下次追加上传的位置。 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在发送请求时对您头域中的中文汉字进行 url 编码,发送编码后数据。如您设置的值 content-disposition 为 ”attachment; filename="中文.txt"”,则对象元数据中存储的信息为”attachment; filename="%E4%B8%AD%E6%96%87.txt"”。使用浏览器访问时浏览器将会自动解码。 如若不需要 SDK 帮您编码,可以调用 AppendObjectRequest.setIsEncodeHeaders(false) 关闭自动编码。 父主题: 上传对象
  • 设置对象自定义元数据 您可以通过ObjectMetadata.addUserMetadata来设置对象自定义元数据。以下代码展示如何设置对象自定义元数据: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ObjectMetadata metadata = new ObjectMetadata(); metadata.addUserMetadata("property1", "property-value1"); metadata.getMetadata().put("property2", "property-value2"); obsClient.putObject("bucketname", "objectname", new File("localfile"), metadata);
  • 设置对象长度 您可以通过ObjectMetadata.setContentLength来设置对象长度。以下代码展示如何设置对象长度: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentLength(1024 * 1024L);//1MB obsClient.putObject("bucketname", "objectname", new File("localfile"), metadata);
  • 设置对象MIME类型 您可以通过ObjectMetadata.setContentType来设置对象MIME类型。以下代码展示如何设置对象MIME类型: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 上传图片 ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("image/jpeg"); obsClient.putObject("bucketname", "objectname", new File("localimage.jpg"), metadata);
  • 设置对象MD5值 您可以通过ObjectMetadata.setContentMd5来设置对象MD5值。以下代码展示如何设置对象MD5值: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 上传图片 ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentMd5("your md5 which should be encoded by base64"); obsClient.putObject("bucketname", "objectname", new File("localimage.jpg"), metadata);
  • 设置对象存储类型 您可以通过ObjectMetadata.setStorageClass来设置对象存储类型。以下代码展示如何设置对象存储类型: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ObjectMetadata metadata = new ObjectMetadata(); // 设置对象存储类型为低频访问存储 metadata.setObjectStorageClass(StorageClassEnum.WARM); obsClient.putObject("bucketname", "objectname", new File("localfile"), metadata);
  • 查看桶日志配置 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getBucketLogging查看桶日志配置。以下代码展示了如何查看桶日志配置: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); BucketLoggingConfiguration config = obsClient.getBucketLogging("bucketname"); Log.i("GetBucketLoggingConfiguration","\t" + config.getTargetBucketName()); Log.i("GetBucketLoggingConfiguration","\t" + config.getLogfilePrefix()); 父主题: 设置访问日志
  • 断点续传上传 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 当上传大文件时,经常出现因网络不稳定或程序崩溃导致上传失败的情况。失败后再次重新上传不仅浪费资源,而且当网络不稳定时仍然有上传失败的风险。断点续传上传接口能有效地解决此类问题引起的上传失败,其原理是将待上传的文件分成若干个分段分别上传,并实时地将每段上传结果统一记录在checkpoint文件中,仅当所有分段都上传成功时返回上传成功的结果,否则抛出异常提醒用户再次调用接口进行重新上传(重新上传时因为有checkpoint文件记录当前的上传进度,避免重新上传所有分段,从而节省资源提高效率)。 您可以通过ObsClient.uploadFile进行断点续传上传。该接口可设置的参数如下: 参数 作用 OBS Android SDK对应方法 bucketName 桶名,必选参数。 UploadFileRequest.setBucketName objectKey 对象名,必选参数。 UploadFileRequest.setObjectKey uploadFile 待上传的本地文件,必选参数。 UploadFileRequest.setUploadFile partSize 分段大小,单位字节,取值范围是100KB~5GB,默认为5MB。 UploadFileRequest.setPartSize taskNum 分段上传时的最大并发数,默认为1。 UploadFileRequest.setTaskNum enableCheckpoint 是否开启断点续传模式,默认为false,表示不开启。 UploadFileRequest.setEnableCheckpoint isEncodeHeaders 是否自动编码请求头 UploadFileRequest.setIsEncodeHeaders checkpointFile 记录上传进度的文件,只在断点续传模式下有效。当该值为空时,默认与待上传的本地文件同目录。 UploadFileRequest.setCheckpointFile objectMetadata 对象的属性。 UploadFileRequest.setObjectMetadata enableCheckSum 是否校验待上传文件的内容,只在断点续传模式下有效。默认为false,表示不校验。 UploadFileRequest.setEnableCheckSum progressListener 设置数据传输监听器,用于获取上传进度。 UploadFileRequest.setProgressListener 以下代码展示了如何使用断点续传上传接口上传文件: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); UploadFileRequest request = new UploadFileRequest("bucketname", "objectname"); // 设置待上传的本地文件,其中localfile为待上传的本地文件路径,需要指定到具体的文件名 request.setUploadFile("localfile"); // 设置分段上传时的最大并发数 request.setTaskNum(5); // 设置分段大小为10MB request.setPartSize(10 * 1024 * 1024); // 开启断点续传模式 request.setEnableCheckpoint(true); try{ // 进行断点续传上传 CompleteMultipartUploadResult result = obsClient.uploadFile(request); }catch (ObsException e) { // 发生异常时可再次调用断点续传上传接口进行重新上传 } 断点续传上传接口是利用分段上传特性实现的,是对分段上传的封装和加强。 断点续传上传接口不仅能在失败重传时节省资源提高效率,还因其对分段进行并发上传的机制能加快上传速度,帮助用户快速完成上传业务;且其对用户透明,用户不用关心checkpoint文件的创建和删除、分段任务的切分、并发上传的实现等内部细节。 enableCheckpoint参数默认是false,代表不启用断点续传模式,此时断点续传上传接口退化成对分段上传的简单封装,不会产生checkpoint文件。 checkpointFile参数和enableCheckSum参数仅在enableCheckpoint参数为true时有效。 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在发送请求时对您头域中的中文汉字进行 url 编码,发送编码后数据。如您设置的值 content-disposition 为 ”attachment; filename="中文.txt"”,则对象元数据中存储的信息为”attachment; filename="%E4%B8%AD%E6%96%87.txt"”。使用浏览器访问时浏览器将会自动解码。 如若不需要 SDK 帮您编码,可以调用 UploadFileRequest.setIsEncodeHeaders(false) 关闭自动编码。 断点续传上传功能暂不支持暂停或取消操作。 父主题: 上传对象
  • 设置桶策略 您可以通过ObsClient.setBucketPolicy设置桶策略。示例代码如下: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); obsClient.setBucketPolicy("bucketname", "your policy"); 桶策略内容的具体格式(JSON格式字符串)请参考《对象存储服务API参考》。
  • 获取桶策略 您可以通过ObsClient.getBucketPolicy获取桶策略。示例代码如下: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); String policy = obsClient.getBucketPolicy("bucketname"); Log.i("GetBucketPolicy","\t" + policy);
  • 删除桶策略 您可以通过ObsClient.deleteBucketPolicy删除桶策略。示例代码如下: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); obsClient.deleteBucketPolicy("bucketname");
  • 初始化OBS客户端 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 向OBS发送任一HTTP/HTTPS请求之前,必须先创建一个ObsClient实例: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 使用访问OBS // 关闭obsClient obsClient.close(); 更多关于OBS客户端初始化的操作请参见“初始化”章节。 日志配置详见配置SDK日志 父主题: 快速入门
  • 查看桶标签 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getBucketTagging查看桶标签。以下代码展示了如何查看桶标签: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); BucketTagInfo bucketTagInfo = obsClient.getBucketTagging("bucketname"); for(Tag tag : bucketTagInfo.getTagSet().getTags()){ Log.i("GetBucketTagging", "\t" + tag.getKey() + ":" + tag.getValue()); } 父主题: 标签管理
  • 查看桶多版本状态 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getBucketVersioning查看桶的多版本状态。以下代码展示了如何查看桶的多版本状态: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); BucketVersioningConfiguration status = obsClient.getBucketVersioning("bucketname"); Log.i("GetBucketVersioning", "\t" + status.getVersioningStatus()); 父主题: 多版本控制
  • 删除单个多版本对象 您可以通过ObsClient.deleteObject接口传入版本号(versionId)删除多版本对象,示例代码如下: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); obsClient.deleteObject("bucketname", "objectname", "versionid");
  • 查看托管配置 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getBucketWebsite查看桶的托管配置。以下代码展示了如何查看托管配置: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); WebsiteConfiguration config = obsClient.getBucketWebsite("bucketname"); Log.i("GetBucketWebsiteConfiguration", "\t" + config.getKey()); Log.i("GetBucketWebsiteConfiguration", "\t" + config.getSuffix()); for(RouteRule rule : config.getRouteRules()){ Log.i("GetBucketWebsiteConfiguration", "\t" + rule); } 父主题: 静态网站托管
  • 简单创建 以下代码展示如何新建一个桶: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 创建桶 try{ // 创建桶成功 HeaderResponse response = obsClient.createBucket("bucketname"); Log.i("CreateBucket", response.getRequestId()); } catch (ObsException e) { // 创建桶失败 Log.e("CreateBucket", "Response Code: " + e.getResponseCode()); Log.e("CreateBucket", "Error Message: " + e.getErrorMessage()); Log.e("CreateBucket", "Error Code: " + e.getErrorCode()); Log.e("CreateBucket", "Request ID: " + e.getErrorRequestId()); Log.e("CreateBucket", "Host ID: " + e.getErrorHostId()); } 桶的名字是全局唯一的,所以您需要确保不与已有的桶名称重复。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用类IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 本示例创建的桶的访问权限默认是私有读写,存储类型默认是标准类型,区域位置是默认区域。
  • 带参数创建 创建桶时可以指定桶的访问权限、存储类型和区域位置。OBS支持的桶的存储类型有三类,参见桶存储类型。示例代码如下: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ObsBucket obsBucket = new ObsBucket(); obsBucket.setBucketName("bucketname"); // 设置桶访问权限为公共读,默认是私有读写 obsBucket.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ); // 设置桶的存储类型为归档存储 obsBucket.setBucketStorageClass(StorageClassEnum.COLD); // 设置桶区域位置 obsBucket.setLocation("bucketlocation"); // 创建桶 try{ // 创建桶成功 HeaderResponse response =obsClient.createBucket(obsBucket); Log.i("CreateBucket", response.getRequestId()); } catch (ObsException e) { // 创建桶失败 Log.e("CreateBucket", "Response Code: " + e.getResponseCode()); Log.e("CreateBucket", "Error Message: " + e.getErrorMessage()); Log.e("CreateBucket", "Error Code: " + e.getErrorCode()); Log.e("CreateBucket", "Request ID: " + e.getErrorRequestId()); Log.e("CreateBucket", "Host ID: " + e.getErrorHostId()); }
  • 删除跨域规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.deleteBucketCors删除桶的跨域规则。以下代码展示了如何删除跨域规则: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); obsClient.deleteBucketCors("bucketname"); 父主题: 跨域资源共享
  • 关闭桶日志 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 关闭桶日志功能实际上就是调用ObsClient.setBucketLogging将日志配置清空,以下代码展示了如何关闭桶日志: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 对桶设置空的日志配置 obsClient.setBucketLogging("bucketname", new BucketLoggingConfiguration()); 父主题: 设置访问日志
  • 设置多版本对象访问权限 您可以通过ObsClient.setObjectAcl接口传入版本号(versionId)设置多版本对象的访问权限,示例代码如下: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 通过预定义访问策略设置多版本对象访问权限为公共读 obsClient.setObjectAcl("bucketname", "objectname", AccessControlList.REST_CANNED_PUBLIC_READ, "versionid"); AccessControlList acl = new AccessControlList(); Owner owner = new Owner(); owner.setId("ownerid"); acl.setOwner(owner); // 为所有用户设置读权限 acl.grantPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ); // 直接设置多版本对象访问权限 obsClient.setObjectAcl("bucketname", "objectname", acl, "versionid"); ACL中需要填写的所有者(Owner)或者被授权用户(Grantee)的ID,是指用户的帐号ID,可通过OBS控制台“我的凭证”页面查看。
  • 获取多版本对象访问权限 您可以通过ObsClient.getObjectAcl接口传入版本号(versionId)获取多版本对象的访问权限,示例代码如下: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); AccessControlList acl = obsClient.getObjectAcl("bucketname", "objectname", "versionid"); System.out.println(acl);
  • 获取对象属性 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getObjectMetadata来获取对象属性,包括对象长度,对象MIME类型,对象自定义元数据等信息。以下代码展示了如何获取对象属性: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String 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); ObjectMetadata metadata = obsClient.getObjectMetadata("bucketname", "objectname"); Log.i("GetObjectMetadata","\t" + metadata.getContentType()); Log.i("GetObjectMetadata","\t" + metadata.getContentLength()); // 获取用户自定义元数据 Log.i("GetObjectMetadata","\t" + metadata.getUserMetadata("property")); // 获取所有原始响应头域 Log.i("GetObjectMetadata","\t" + metadata.getOriginalHeaders()); 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在接收响应时使用 url 解码规则解码响应头头中的信息,。如您的元数据存储的 content-disposition 为 ”attachment; filename="%E4%B8%AD%E6%96%87.txt"”,则 SDK 获取结果为”attachment; filename="中文.txt"”。 如若不需要 SDK 帮您解码,可以调用 GetObjectMetadataRequest.setIsEncodeHeaders(false) 关闭自动解码。 您也可以通过 metadata.getOriginalHeaders 获取所有原始响应头的信息。 父主题: 管理对象
  • 初始化分段上传任务 使用分段上传方式传输数据前,必须先通知OBS初始化一个分段上传任务。该操作会返回一个OBS服务端创建的全局唯一标识(Upload ID),用于标识本次分段上传任务。您可以根据这个唯一标识来发起相关的操作,如取消分段上传任务、列举分段上传任务、列举已上传的段等。 您可以通过ObsClient.initiateMultipartUpload初始化一个分段上传任务: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest("bucketname", "objectname"); ObjectMetadata metadata = new ObjectMetadata(); metadata.addUserMetadata("property", "property-value"); metadata.setContentType("text/plain"); request.setMetadata(metadata); InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request); String uploadId = result.getUploadId(); Log.i("InitiateMultipartUpload", "\t" + uploadId); 用InitiateMultipartUploadRequest指定上传对象的名称和所属桶。 在InitiateMultipartUploadRequest中,您可以设置对象MIME类型、对象存储类型、对象自定义元数据等对象属性。 InitiateMultipartUploadResult.getUploadId返回分段上传任务的全局唯一标识(Upload ID),在后面的操作中将用到它。 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在发送请求时对您头域中的中文汉字进行 url 编码,发送编码后数据。如您设置的值 content-disposition 为 ”attachment; filename="中文.txt"”,则对象元数据中存储的信息为”attachment; filename="%E4%B8%AD%E6%96%87.txt"”。使用浏览器访问时浏览器将会自动解码。 如若不需要 SDK 帮您编码,可以调用 InitiateMultipartUploadRequest.setIsEncodeHeaders(false) 关闭自动编码。
  • 列举分段上传任务 您可以通过ObsClient.listMultipartUploads列举分段上传任务。列举分段上传任务可设置的参数如下: 参数 作用 OBS Android SDK对应方法 bucketName 桶名。 ListMultipartUploadsRequest.setBucketName prefix 限定返回的分段上传任务中的对象名必须带有prefix前缀。 ListMultipartUploadsRequest.setPrefix delimiter 用于对分段上传任务中的对象名进行分组的字符。对于对象名中包含delimiter的任务,其对象名(如果请求中指定了prefix,则此处的对象名需要去掉prefix)中从首字符至第一个delimiter之间的字符串将作为一个分组并作为commonPrefix返回。 ListMultipartUploadsRequest.setDelimiter maxUploads 列举分段上传任务的最大数目,取值范围为1~1000,当超出范围时,按照默认的1000进行处理。 ListMultipartUploadsRequest.setMaxUploads keyMarker 表示列举时返回指定的keyMarker之后的分段上传任务。 ListMultipartUploadsRequest.setKeyMarker uploadIdMarker 只有与keyMarker参数一起使用时才有意义,用于指定返回结果的起始位置,即列举时返回指定keyMarker的uploadIdMarker之后的分段上传任务。 ListMultipartUploadsRequest.setUploadIdMarker 简单列举分段上传任务 // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; String uploadId = "upload id from initiateMultipartUpload"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ListMultipartUploadsRequest request = new ListMultipartUploadsRequest("bucketname"); MultipartUploadListing result = obsClient.listMultipartUploads(request); for(MultipartUpload upload : result.getMultipartTaskList()){ Log.i("ListMultipartUploads","\t" + upload.getUploadId()); Log.i("ListMultipartUploads","\t" + upload.getObjectKey()); Log.i("ListMultipartUploads","\t" + upload.getInitiatedDate()); } 列举分段上传任务至多返回1000个任务信息,如果指定的桶包含的分段上传任务数量大于1000,则MultipartUploadListing.isTruncated为true表明本次没有返回全部结果,并可通过MultipartUploadListing.getNextKeyMarker和MultipartUploadListing.getNextUploadIdMarker获取下次列举的起点。 如果想获取指定桶包含的所有分段上传任务,可以采用分页列举的方式。 分页列举全部分段上传任务 // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; String uploadId = "upload id from initiateMultipartUpload"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ListMultipartUploadsRequest request = new ListMultipartUploadsRequest("bucketname"); MultipartUploadListing result; do{ result = obsClient.listMultipartUploads(request); for(MultipartUpload upload : result.getMultipartTaskList()){ Log.i("ListMultipartUploads","\t" + upload.getUploadId()); Log.i("ListMultipartUploads","\t" + upload.getObjectKey()); Log.i("ListMultipartUploads","\t" + upload.getInitiatedDate()); } request.setKeyMarker(result.getNextKeyMarker()); request.setUploadIdMarker(result.getNextUploadIdMarker()); }while(result.isTruncated());
共100000条