华为云用户手册

  • 为桶设置预定义访问策略 以下代码展示如何为桶设置预定义访问策略: // 认证用的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); // 设置桶访问权限为私有读写 obsClient.setBucketAcl("bucketname", AccessControlList.REST_CANNED_PRIVATE);
  • 直接设置桶访问权限 以下代码展示如何直接设置桶访问权限: // 认证用的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 = new AccessControlList(); Owner owner = new Owner(); owner.setId("ownerid"); acl.setOwner(owner); // 为指定用户设置完全控制权限 acl.grantPermission(new CanonicalGrantee("userid"), Permission.PERMISSION_FULL_CONTROL); // 为所有用户设置读权限 acl.grantPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ); // 直接设置桶访问权限 obsClient.setBucketAcl("bucketname", acl); ACL中需要填写的所有者(Owner)或者被授权用户(Grantee)的ID,是指用户的帐号ID,可通过OBS控制台“我的凭证”页面查看。
  • 获取桶访问权限 您可以通过ObsClient.getBucketAcl获取桶的访问权限。以下代码展示如何获取桶访问权限: // 认证用的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.getBucketAcl("bucketname"); Log.i("GetBucketAcl", acl.toString());
  • 创桶时指定预定义访问策略 以下代码展示如何在创建桶时指定预定义访问策略: // 认证用的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_WRITE); // 创建桶 obsClient.createBucket(obsBucket);
  • 删除桶 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.deleteBucket删除桶。以下代码展示如何删除一个桶: // 认证用的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.deleteBucket("bucketname"); 如果桶不为空(包含对象或分段上传碎片),则该桶无法删除。 删除桶非幂等操作,删除不存在的桶会报错。 父主题: 管理桶
  • 范围下载 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 如果只需要下载对象的其中一部分数据,可以使用范围下载,下载指定范围的数据。如果指定的下载范围是0~1000,则返回第0到第1000个字节的数据,包括第1000个,共1001字节的数据,即[0, 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); GetObjectRequest request = new GetObjectRequest("bucketname", "objectname"); // 指定开始和结束范围 request.setRangeStart(0l); request.setRangeEnd(1000l); ObsObject obsObject = obsClient.getObject(request); // 读取数据 byte[] buf = new byte[1024]; InputStream in = obsObject.getObjectContent(); for (int n = 0; n != -1; ) { n = in.read(buf, 0, buf.length); } in.close(); 如果指定的范围无效(比如开始位置、结束位置为负数,大于文件大小),则会返回整个对象。 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在接收响应时使用 url 解码规则解码响应头头中的信息,。如您的元数据存储的 content-disposition 为 ”attachment; filename="%E4%B8%AD%E6%96%87.txt"”,则 SDK 获取结果为”attachment; filename="中文.txt"”。 如若不需要 SDK 帮您解码,可以调用 GetObjectRequest.setIsEncodeHeaders(false) 关闭自动解码。 您也可以通过 obsObject.getMetadata().getOriginalHeaders() 获取所有原始响应头的信息。 可以利用范围下载并发下载大对象,详细代码示例请参考ConcurrentDownloadObjectSample。 父主题: 下载对象
  • 获取桶存量信息 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 桶存量信息包括桶已使用的空间大小以及桶包含的对象个数。您可以通过ObsClient.getBucketStorageInfo获取桶的存量信息。以下代码展示如何获取桶存量信息: // 认证用的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); BucketStorageInfo storageInfo = obsClient.getBucketStorageInfo("bucketname"); Log.i("GetBucketStorageInfo", "\t" + storageInfo.getObjectNumber()); Log.i("GetBucketStorageInfo", "\t" + storageInfo.getSize()); 父主题: 管理桶
  • 查看跨域规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getBucketCors查看桶的跨域规则。以下代码展示了如何查看跨域规则: // 认证用的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); BucketCors cors = obsClient.getBucketCors("bucketname"); for(BucketCorsRule rule : cors.getRules()){ Log.i("GetBucketCors","\t" + rule.getId()); Log.i("GetBucketCors","\t" + rule.getMaxAgeSecond()); Log.i("GetBucketCors","\t" + rule.getAllowedHeader()); Log.i("GetBucketCors","\t" + rule.getAllowedOrigin()); Log.i("GetBucketCors","\t" + rule.getAllowedMethod()); Log.i("GetBucketCors","\t" + rule.getExposeHeader()); } 父主题: 跨域资源共享
  • 配置默认主页和错误页面 以下代码展示了如何配置默认主页和错误页面: // 认证用的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 = new WebsiteConfiguration(); // 配置默认主页 config.setSuffix("index.html"); // 配置错误页面 config.setKey("error.html"); obsClient.setBucketWebsite("bucketname", config);
  • 配置重定向规则 以下代码展示了如何配置重定向规则: // 认证用的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 = new WebsiteConfiguration(); // 配置默认主页 config.setSuffix("index.html"); // 配置错误页面 config.setKey("error.html"); RouteRule rule = new RouteRule(); Redirect r = new Redirect(); r.setHostName("www.example.com"); r.setHttpRedirectCode("305"); r.setRedirectProtocol(ProtocolEnum.HTTP); r.setReplaceKeyPrefixWith("replacekeyprefix"); rule.setRedirect(r); RouteRuleCondition condition = new RouteRuleCondition(); condition.setHttpErrorCodeReturnedEquals("404"); condition.setKeyPrefixEquals("keyprefix"); rule.setCondition(condition); config.getRouteRules().add(rule); obsClient.setBucketWebsite("bucketname", config);
  • 配置所有请求重定向 以下代码展示了如何配置所有请求重定向: // 认证用的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 = new WebsiteConfiguration(); RedirectAllRequest redirectAll = new RedirectAllRequest(); redirectAll.setHostName("www.example.com"); // 支持http和https redirectAll.setRedirectProtocol(ProtocolEnum.HTTP); config.setRedirectAllRequestsTo(redirectAll); obsClient.setBucketWebsite("bucketname", config);
  • 获取桶存储类型 您可以通过ObsClient.getBucketStoragePolicy获取桶存储类型。以下代码展示如何获取桶存储类型: // 认证用的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); BucketStoragePolicyConfiguration storagePolicy = obsClient.getBucketStoragePolicy("bucketname"); Log.i("GetBucketStoragePolicy", "\t" + storagePolicy.getBucketStorageClass());
  • 设置桶存储类型 您可以通过ObsClient.setBucketStoragePolicy设置桶存储类型。以下代码展示如何设置桶存储类型: // 认证用的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); // 设置桶的存储类型为低频访问存储. BucketStoragePolicyConfiguration storgePolicy = new BucketStoragePolicyConfiguration(); storgePolicy.setBucketStorageClass(StorageClassEnum.WARM); obsClient.setBucketStoragePolicy("bucketname", storgePolicy);
  • 查看生命周期规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getBucketLifecycle查看桶的生命周期规则。以下代码展示了如何查看桶的生命周期规则: // 认证用的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); LifecycleConfiguration config = obsClient.getBucketLifecycle("bucketname"); for (LifecycleConfiguration.Rule rule : config.getRules()) { Log.i("GetBucketLifecycleConfiguration",rule.getId()); Log.i("GetBucketLifecycleConfiguration",rule.getPrefix()); for(LifecycleConfiguration.Transition transition : rule.getTransitions()){ Log.i("GetBucketLifecycleConfiguration",String.valueOf(transition.getDays())); Log.i("GetBucketLifecycleConfiguration",transition.getStorageClass()); } Log.i("GetBucketLifecycleConfiguration",rule.getExpiration() != null ? String.valueOf(rule.getExpiration().getDays()) : ""); for(LifecycleConfiguration.NoncurrentVersionTransition noncurrentVersionTransition : rule.getNoncurrentVersionTransitions()){ Log.i("GetBucketLifecycleConfiguration",String.valueOf(noncurrentVersionTransition.getDays())); Log.i("GetBucketLifecycleConfiguration",noncurrentVersionTransition.getStorageClass()); } Log.i("GetBucketLifecycleConfiguration",rule.getNoncurrentVersionExpiration() != null ?String.valueOf(rule.getNoncurrentVersionExpiration().getDays()) : ""); } 父主题: 生命周期管理
  • 删除生命周期规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.deleteBucketLifecycle删除桶的生命周期规则。以下代码展示了如何删除桶的生命周期规则: // 认证用的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.deleteBucketLifecycle("bucketname"); 父主题: 生命周期管理
  • 获取上传进度 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过PutObjectRequest.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); PutObjectRequest request = new PutObjectRequest("bucketname", "objectname"); request.setFile(new File("localfile")); // localfile为上传的本地文件路径,需要指定到具体的文件名 request.setProgressListener(new ProgressListener() { @Override public void progressChanged(ProgressStatus status) { // 获取上传平均速率 Log.i("PutObject", "AverageSpeed:" + status.getAverageSpeed()); // 获取上传进度百分比 Log.i("PutObject", "TransferPercentage:" + status.getTransferPercentage()); } }); // 每上传1MB数据反馈上传进度 request.setProgressInterval(1024 * 1024L); obsClient.putObject(request); 支持获取上传进度的接口包括:流式上传、文件上传、上传段、追加上传和断点续传上传; 如果ProgressStatus.getTransferPercentage()返回-1,表明是流式上传,此时必须设置对象属性中的对象长度(Content-Length)。 父主题: 上传对象
  • 获取下载进度 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过GetObjectRequest.setProgressInterval设置数据传输接口来获取下载的进度。示例代码如下: // 认证用的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); GetObjectRequest request = new GetObjectRequest("bucketname", "objectname"); request.setProgressListener(new ProgressListener() { @Override public void progressChanged(ProgressStatus status) { // 获取下载平均速率 Log.i("GetObject", "AverageSpeed:" + status.getAverageSpeed()); // 获取下载进度百分比 Log.i("GetObject", "TransferPercentage:" + status.getTransferPercentage()); } }); // 每上传1MB数据反馈下载进度 request.setProgressInterval(1024 * 1024L); ObsObject obsObject = obsClient.getObject(request); // 读取对象内容 System.out.println("Object content:"); InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len; while ((len=input.read(b)) != -1){ bos.write(b, 0, len); } System.out.println(new String(bos.toByteArray())); bos.close(); input.close(); 支持获取下载进度的接口包括:流式下载、范围下载和断点续传下载。 父主题: 下载对象
  • 删除单个对象 您可以通过ObsClient.deleteObject删除单个对象。以下代码展示如何删除单个对象: // 认证用的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");
  • 批量删除对象 您可以通过ObsClient.deleteObjects批量删除对象。 每次最多删除1000个对象,并支持两种响应模式:详细(verbose)模式和简单(quiet)模式。 详细模式:返回的删除成功和删除失败的所有结果,默认模式。 简单模式:只返回的删除过程中出错的结果。 以下代码展示了如何进行批量删除桶内所有对象: // 认证用的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 = new ObsClient(ak, sk, endPoint); ListVersionsRequest request = new ListVersionsRequest("bucketname"); // 每次批量删除100个对象 request.setMaxKeys(100); ListVersionsResult result; do { result = obsClient.listVersions(request); DeleteObjectsRequest deleteRequest = new DeleteObjectsRequest("bucketname"); for(VersionOrDeleteMarker v : result.getVersions()) { deleteRequest.addKeyAndVersion(v.getKey(), v.getVersionId()); } DeleteObjectsResult deleteResult = obsClient.deleteObjects(deleteRequest); // 获取删除成功的对象 Log.i("DeletesObjects",deleteResult.getDeletedObjectResults()); // 获取删除失败的对象 Log.i("DeletesObjects", deleteResult.getErrorResults()); request.setKeyMarker(deleteResult.getNextKeyMarker()); request.setVersionIdMarker(deleteResult.getNextVersionIdMarker()); }while(result.isTruncated());
  • 获取多版本对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getObject接口传入版本号(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); // 设置versionId获取多版本对象 ObsObject obsObject = obsClient.getObject("bucketname", "objectname", "versionid"); obsObject.getObjectContent().close(); 如果版本号为空则默认下载最新版本的对象。 父主题: 多版本控制
  • 判断桶是否存在 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.headBucket接口判断该桶是否已存在。以下代码展示如何判断指定桶是否存在: // 认证用的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); boolean exists = obsClient.headBucket("bucketname"); 父主题: 管理桶
  • OBS客户端通用示例 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 使用OBS客户端进行接口调用操作完成后,没有异常抛出,则表明返回值有效,返回SDK公共响应头实例或其子类实例;若抛出异常,则说明操作失败,此时应从SDK自定义异常实例中获取错误信息。 以下代码展示了使用OBS客户端的通用方式: // 您的工程中可以只保留一个全局的ObsClient实例 // ObsClient是线程安全的,可在并发场景下使用 ObsClient obsClient = null; try { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变 量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥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 = new ObsClient(ak, sk, endPoint); // 调用接口进行操作,例如上传对象,其中localfile为待上传的本地文件路径,需要指定到具体的文件名 HeaderResponse response = obsClient.putObject("bucketname", "objectname", new File("localfile")); Log.i("PutObject", response); } catch (ObsException e) { Log.e("PutObject", "Response Code: " + e.getResponseCode()); Log.e("PutObject", "Error Message: " + e.getErrorMessage()); Log.e("PutObject", "Error Code: " + e.getErrorCode()); Log.e("PutObject", "Request ID: " + e.getErrorRequestId()); Log.e("PutObject", "Host ID: " + e.getErrorHostId()); }finally{ // 关闭ObsClient实例,如果是全局ObsClient实例,可以不在每个方法调用完成后关闭 // ObsClient在调用ObsClient.close方法关闭后不能再次使用 if(obsClient != null){ try { obsClient.close(); } catch (IOException e) { } } } 父主题: 快速入门
  • 复制多版本对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.copyObject接口传入版本号(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); CopyObjectRequest request = new CopyObjectRequest(); request.setSourceBucketName("sourebucketname"); request.setSourceObjectKey("sourceobjectname"); // 设置要复制对象的版本号 request.setVersionId("versionid"); request.setDestinationBucketName("destbucketname"); request.setDestinationObjectKey("destobjectname"); obsClient.copyObject(request); 父主题: 多版本控制
  • SDK公共响应头 调用ObsClient类的相关接口成功后,均会返回公共响应头类,即HeaderResponse类实例(或其子类实例),该类包含了HTTP/HTTPS的响应头信息。 处理公共响应头的示例代码如下: // 认证用的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); HeaderResponse response = obsClient.createBucket("bucketname"); //从公共响应头中获取request-id Log.i("CreateBucket", "\t" + response.getRequestId()); obsClient.close(); 父主题: 异常处理
  • 创建文件夹 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 OBS本身是没有文件夹的概念的,桶中存储的元素只有对象。创建文件夹实际上是创建了一个大小为0且对象名以“/”结尾的对象,这类对象与其他对象无任何差异,可以进行下载、删除等操作,只是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); final String keySuffixWithSlash = "parent_directory/"; obsClient.putObject("bucketname", keySuffixWithSlash, new ByteArrayInputStream(new byte[0])); // 在文件夹下创建对象 obsClient.putObject("bucketname", keySuffixWithSlash + "objectname", new ByteArrayInputStream("Hello OBS".getBytes())); 创建文件夹本质上来说是创建了一个大小为0且对象名以“/”结尾的对象。 多级文件夹创建最后一级即可,比如src1/src2/src3/,创建src1/src2/src3/即可,无需创建src1/、src1/src2/。 父主题: 上传对象
  • 为日志对象设置权限 以下代码展示了如何为日志对象设置权限: // 认证用的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 targetBucket = "targetbucketname"; // 设置桶的日志配置 BucketLoggingConfiguration config = new BucketLoggingConfiguration(); // 设置委托名字,需要到 统一身份认证 服务( IAM )创建委托 config.setAgency("your agency"); config.setTargetBucketName(targetBucket); config.setLogfilePrefix("prefix"); // 为所有用户设置对日志对象的读权限 GrantAndPermission grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ); config.setTargetGrants(new GrantAndPermission[]{grant1}); obsClient.setBucketLogging("bucketname", config);
  • 设置桶标签 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.setBucketTagging设置桶标签。以下代码展示了如何设置桶标签: // 认证用的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 = new BucketTagInfo(); TagSet tagSet = new TagSet(); tagSet.addTag("tag1", "value1"); tagSet.addTag("tag2", "value2"); bucketTagInfo.setTagSet(tagSet); obsClient.setBucketTagging("bucketname", bucketTagInfo); 每个桶支持最多10个标签。 标签的Key和Value支持Unicode。 父主题: 标签管理
  • 获取桶元数据 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getBucketMetadata接口获取桶元数据。以下代码展示如何获取桶元数据: // 认证用的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); BucketMetadataInfoRequest request = new BucketMetadataInfoRequest("bucketname"); request.setOrigin("http://www.a.com"); //获取桶元数据 BucketMetadataInfoResult result = obsClient.getBucketMetadata(request); Log.i("GetBucketMetadata", "\t:" + result.getDefaultStorageClass()); Log.i("GetBucketMetadata", "\t:" + result.getAllowOrigin()); Log.i("GetBucketMetadata", "\t:" + result.getMaxAge()); Log.i("GetBucketMetadata", "\t:" + result.getAllowHeaders()); Log.i("GetBucketMetadata", "\t:" + result.getAllowMethods()); Log.i("GetBucketMetadata", "\t:" + result.getExposeHeaders()); BucketMetadataInfoResult.getAllowMethods等方法的值参见桶的跨域资源共享(CORS)配置。 父主题: 管理桶
  • 网站文件托管 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可通过以下步骤实现网站文件托管: 将网站文件上传至OBS的桶中,并设置对象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); // 上传对象,设置对象MIME类型 PutObjectRequest request = new PutObjectRequest(); request.setBucketName("bucketname"); request.setObjectKey("test.html"); request.setFile(new File("localfile.html")); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("text/html"); request.setMetadata(metadata); obsClient.putObject(request); // 设置对象访问权限为公共读 obsClient.setObjectAcl("bucketname", "test.html", AccessControlList.REST_CANNED_PUBLIC_READ); 上例中您可以使用https://bucketname.your-endpoint/test.html在浏览器直接访问托管的文件。 父主题: 静态网站托管
  • 参数描述 字段名 类型 约束 说明 option 请求桶的上下文,配置option 必选 桶参数。 object_info obs_object_info * 必选 对象名和版本号,非多版本对象,version设置为0。 encryption_params server_side_encryption_params * 可选 服务端加密配置参数。 handler obs_get_object_handler * 必选 回调函数。 callback_data void * 可选 回调数据。
共100000条