华为云用户手册

  • 流式下载 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 以下代码展示了如何进行流式下载: // 认证用的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); ObsObject obsObject = obsClient.getObject("bucketname", "objectname"); // 读取对象内容 Log.i("GetObject", "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); } Log.i("GetObject", new String(bos.toByteArray())); bos.close(); input.close(); ObsClient.getObject的返回实例ObsObject实例包含对象所在的桶、对象名、对象属性、对象输入流等。 通过操作对象输入流可将对象的内容读取到本地文件或者内存中。 由于 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() 获取所有原始响应头的信息。 ObsObject.getObjectContent获取的对象输入流一定要显式关闭,否则会造成资源泄露。 父主题: 下载对象
  • 图片处理 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 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实例 final ObsClient obsClient = new ObsClient(ak, sk, endPoint); GetObjectRequest request = new GetObjectRequest("bucketname", "objectname.jpg"); // 对图片依次进行缩放、旋转 request.setImageProcess("image/resize,m_fixed,w_100,h_100/rotate,90"); ObsObject obsObject = obsClient.getObject(request); obsObject.getObjectContent().close(); 使用GetObjectRequest.setImageProcess指定图片处理参数。 图片处理参数支持级联处理,可对图片文件依次执行多条命令。 父主题: 下载对象
  • 上传对象时指定预定义访问策略 以下代码展示如何在上传对象时指定预定义访问策略: // 认证用的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); PutObjectRequest request = new PutObjectRequest(); request.setBucketName("bucketname"); request.setObjectKey("objectname"); request.setFile(new File("localfile")); // localfile为待上传的本地文件路径,需要指定到具体的文件名 // 设置对象访问权限为公共读 request.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ); obsClient.putObject(request);
  • 为对象设置预定义访问策略 以下代码展示如何为对象设置预定义访问策略: // 认证用的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); // 设置对象访问权限为私有读写 obsClient.setObjectAcl("bucketname", "objectname", 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实例 final 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.setObjectAcl("bucketname", "objectname", acl); ACL中需要填写的所有者(Owner)或者被授权用户(Grantee)的ID,是指用户的帐号ID,可通过OBS控制台“我的凭证”页面查看。
  • 获取对象访问权限 您可以通过ObsClient.getObjectAcl获取对象的访问权限。以下代码展示如何获取对象访问权限: // 认证用的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); AccessControlList acl = obsClient.getObjectAcl("bucketname", "objectname"); Log.i("GetObjectAcl", acl);
  • 设置桶多版本状态 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.setBucketVersioning设置桶的多版本状态。OBS中的桶支持两种多版本状态: 多版本状态 说明 OBS Android SDK对应值 启用状态 上传对象时,系统为每一个对象创建一个唯一版本号,上传同名的对象将不再覆盖旧的对象,而是创建新的不同版本号的同名对象。 可以指定版本号下载对象,不指定版本号默认下载最新对象。 删除对象时可以指定版本号删除,不带版本号删除对象仅产生一个带唯一版本号的删除标记,并不删除对象。 列出桶内对象列表(ObsClient.listObjects)时默认列出最新对象列表,可以指定列出桶内所有版本对象列表(ObsClient.listVersions)。 除了删除标记外,每个版本的对象存储均需计费。 VersioningStatusEnum.ENABLED 暂停状态 旧的版本数据继续保留。 上传对象时创建对象的版本号为null,上传同名的对象将覆盖原有同名的版本号为null的对象。 可以指定版本号下载对象,不指定版本号默认下载最新对象。 删除对象时可以指定版本号删除,不带版本号删除对象将产生一个版本号为null的删除标记,并删除版本号为null的对象。 除了删除标记外,每个版本的对象存储均需计费。 VersioningStatusEnum.SUSPENDED 以下代码展示了如何设置桶的多版本状态: // 认证用的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.setBucketVersioning("bucketname", new BucketVersioningConfiguration(VersioningStatusEnum.ENABLED)); // 暂停桶多版本状态 obsClient.setBucketVersioning("bucketname", new BucketVersioningConfiguration(VersioningStatusEnum.SUSPENDED)); 父主题: 多版本控制
  • 清除托管配置 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.deleteBucketWebsite清除桶的托管配置。以下代码展示了如何清除托管配置: // 认证用的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.deleteBucketWebsite("bucketname"); 父主题: 静态网站托管
  • 设置对象转换策略 以下代码展示了如何设置最新版本对象和历史版本对象的转换策略: // 认证用的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 = new LifecycleConfiguration(); LifecycleConfiguration.Rule rule = config.new Rule(); rule.setEnabled(true); rule.setId("rule1"); rule.setPrefix("prefix"); LifecycleConfiguration.Transition transition = config.new Transition(); // 指定满足前缀的对象创建30天后转换 transition.setDays(30); // 指定对象转换后的存储类型 transition.setObjectStorageClass(StorageClassEnum.STANDARD); // 直接指定满足前缀的对象转换日期 // transition.setDate(new SimpleDateFormat("yyyy-MM-dd").parse("2018-10-31")); rule.getTransitions().add(transition); LifecycleConfiguration.NoncurrentVersionTransition noncurrentVersionTransition = config.new NoncurrentVersionTransition(); // 指定满足前缀的对象成为历史版本30天后转换 noncurrentVersionTransition.setDays(30); // 指定历史版本对象转换后的存储类型 noncurrentVersionTransition.setObjectStorageClass(StorageClassEnum.COLD); rule.getNoncurrentVersionTransitions().add(noncurrentVersionTransition); config.addRule(rule); obsClient.setBucketLifecycle("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); // 列举带有prefix前缀的100个多版本对象 ListVersionsRequest request = new ListVersionsRequest ("bucketname", 100); request.setPrefix("prefix"); ListVersionsResult result = obsClient.listVersions(request); for(VersionOrDeleteMarker v : result.getVersions()){ Log.i("ListVersions","\t" + v.getKey()); Log.i("ListVersions","\t" + v.getOwner()); Log.i("ListVersions","\t" + v.isDeleteMarker()); }
  • 分页列举全部多版本对象 以下代码展示分页列举全部多版本对象: // 认证用的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); ListVersionsResult result; ListVersionsRequest request = new ListVersionsRequest ("bucketname", 100); do{ result = obsClient.listVersions(request); for(VersionOrDeleteMarker v : result.getVersions()){ Log.i("ListVersions","\t" + v.getKey()); Log.i("ListVersions","\t" + v.getOwner()); Log.i("ListVersions","\t" + v.isDeleteMarker()); } request.setKeyMarker(result.getNextKeyMarker()); request.setVersionIdMarker(result.getNextVersionIdMarker()); }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实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ListVersionsRequest request = new ListVersionsRequest ("bucketname", 1000); request.setDelimiter("/"); ListVersionsResult result = obsClient.listVersions(request); Log.i("ListVersions", "Objects in the root directory:"); for(VersionOrDeleteMarker v : result.getVersions()){ Log.i("ListVersions","\t" + v.getKey()); Log.i("ListVersions","\t" + v.getOwner()); Log.i("ListVersions","\t" + v.isDeleteMarker()); } listVersionsByPrefix(obsClient, result); 递归列出子文件夹中多版本对象的函数listVersionsByPrefix的示例代码如下: static void listVersionsByPrefix(ObsClient obsClient, ListVersionsResult result) throws ObsException{ for(String prefix : result.getCommonPrefixes()){ Log.i("ListVersions", "Objects in folder [" + prefix + "]:"); ListVersionsRequest request = new ListVersionsRequest ("bucketname", 1000); request.setDelimiter("/"); request.setPrefix(prefix) result = obsClient.listVersions(request); for(VersionOrDeleteMarker v : result.getVersions()){ Log.i("ListVersions","\t" + v.getKey()); Log.i("ListVersions","\t" + v.getOwner()); Log.i("ListVersions","\t" + v.isDeleteMarker()); } listVersionsByPrefix(obsClient, result); } } 以上代码示例没有考虑文件夹中多版本对象数超过1000个的情况。 由于是需要列举出文件夹中的对象和子文件夹,且文件夹对象总是以“/”结尾,因此delimiter总是为“/”。 每次递归的返回结果中ListVersionsResult.getVersions包含的是文件夹中的多版本对象;ListVersionsResult.getCommonPrefixes包含的是文件夹的子文件夹。
  • 指定起始位置列举 以下代码展示如何指定起始位置列举多版本对象: // 认证用的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); // 列举对象名字典序在"test"之后的100个多版本对象 ListVersionsRequest request = new ListVersionsRequest ("bucketname", 100); request.setKeyMarker("test"); ListVersionsResult result = obsClient.listVersions(request); for(VersionOrDeleteMarker v : result.getVersions()){ Log.i("ListVersions","\t" + v.getKey()); Log.i("ListVersions","\t" + v.getOwner()); Log.i("ListVersions","\t" + v.isDeleteMarker()); }
  • 列举文件夹中的所有多版本对象 OBS本身是没有文件夹的概念的,桶中存储的元素只有对象。文件夹对象实际上是一个大小为0且对象名以“/”结尾的对象,将这个文件夹对象名作为前缀,即可模拟列举文件夹中对象的功能。以下代码展示如何列举文件夹中的多版本对象: // 认证用的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); ListVersionsResult result; ListVersionsRequest request = new ListVersionsRequest ("bucketname", 100); // 设置文件夹对象名"dir/"为前缀 request.setPrefix("dir/"); do{ result = obsClient.listVersions(request); for(VersionOrDeleteMarker v : result.getVersions()){ Log.i("ListVersions","\t" + v.getKey()); Log.i("ListVersions","\t" + v.getOwner()); Log.i("ListVersions","\t" + v.isDeleteMarker()); } request.setKeyMarker(result.getNextKeyMarker()); request.setVersionIdMarker(result.getNextVersionIdMarker()); }while(result.isTruncated());
  • 简单列举 以下代码展示如何简单列举多版本对象,最多返回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实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ListVersionsResult result = obsClient.listVersions("bucketname"); for(VersionOrDeleteMarker v : result.getVersions()){ Log.i("ListVersions", "\t" + v.getKey()); Log.i("ListVersions","\t" + v.getOwner()); Log.i("ListVersions","\t" + v.isDeleteMarker()); } 每次至多返回1000个多版本对象,如果指定桶包含的对象数量大于1000,则返回结果中ListVersionsResult.isTruncated为true表明本次没有返回全部对象,并可通过ListVersionsResult.getNextKeyMarker和ListVersionsResult.getNextVersionIdMarker获取下次列举的起始位置。 如果想获取指定桶包含的所有多版本对象,可以采用分页列举的方式。
  • 指定数目列举 以下代码展示如何指定数目列举多版本对象: // 认证用的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); ListVersionsResult result = obsClient.listVersions("bucketname", 100); for(VersionOrDeleteMarker v : result.getVersions()){ Log.i("ListVersions","\t" + v.getKey()); Log.i("ListVersions","\t" + v.getOwner()); Log.i("ListVersions","\t" + v.isDeleteMarker()); }
  • 获取桶配额 您可以通过ObsClient.getBucketQuota获取桶配额。以下代码展示如何获取桶配额: // 认证用的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); BucketQuota quota = obsClient.getBucketQuota("bucketname"); Log.i("GetBucketQuota", "\t" + quota.getBucketQuota());
  • 设置桶配额 您可以通过ObsClient.setBucketQuota设置桶配额。以下代码展示如何设置桶配额: // 认证用的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); // 设置桶配额为100MB BucketQuota quota = new BucketQuota(1024 * 1024 * 100); obsClient.setBucketQuota("bucketname", quota); 桶配额值必须为非负整数,单位为字节,支持的最大值为263 - 1。
  • 获取桶区域位置 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getBucketLocation获取桶的区域位置。以下代码展示如何获取桶区域位置: // 认证用的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 location = obsClient.getBucketLocation("bucketname"); Log.i("GetBucketLocation", "\t:" + location); 创建桶时可以指定桶的区域位置,请参见创建桶。 父主题: 管理桶
  • 下载归档存储对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 如果要下载归档存储对象,需要先将归档存储对象恢复。恢复归档存储对象的恢复选项可支持两类,见下表: 选项 说明 OBS Android SDK对应值 快速恢复 恢复耗时1~5分钟。 RestoreTierEnum.EXPEDITED 标准恢复 恢复耗时3~5小时。默认值。 RestoreTierEnum.STANDARD 您可以通过ObsClient.restoreObject恢复归档存储对象。以下代码展示了如何下载归档存储对象: // 认证用的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); RestoreObjectRequest request = new RestoreObjectRequest(); request.setBucketName("bucketname"); request.setObjectKey("objectname"); request.setDays(1); request.setRestoreTier(RestoreTierEnum.EXPEDITED); obsClient.restoreObject(request); // 等待对象恢复 Thread.sleep(60 * 6 * 1000); // 下载对象 ObsObject obsObject = obsClient.getObject("bucketname", "objectname"); obsObject.getObjectContent().close(); ObsClient.restoreObject中指定的对象必须是归档存储类型,否则调用该接口会抛出异常。 RestoreObjectRequest.setDays指定恢复对象保存的时间,取值范围是1~30。 RestoreObjectRequest.setTier指定恢复选项,表示恢复对象所耗的时间。 父主题: 下载对象
  • 设置对象生命周期 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 上传对象或者初始化分段上传任务时,您可以直接指定对象的过期时间。示例代码如下: // 认证用的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")); // 上传对象时,设置对象30天后过期 request.setExpires(30); obsClient.putObject(request); InitiateMultipartUploadRequest request2 = new InitiateMultipartUploadRequest("bucketname", "objectname"); // 初始化分段上传任务时,设置合并段后生成的对象60天后过期 request2.setExpires(60); obsClient.initiateMultipartUpload(request); 该方式仅支持设置以天为单位的对象过期时间,过期后的对象会被OBS服务端自动清理。 该方式设置的对象过期时间,其优先级高于桶生命周期规则。 父主题: 上传对象
  • 设置对象属性 您可以通过ObsClient.setObjectMetadata来设置对象属性,包括对象自定义元数据等信息。 除了 HTTP 标准头域外,您也可以指定自定义元数据,自定义元数据仅支持英文字符、数字与中划线【-】。 以下代码展示了如何设置对象属性: // 认证用的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); SetObjectMetadataRequest request = new SetObjectMetadataRequest("bucketname", "objectname"); // 对象的 HTTP 标准头域 request.setContentType("ContentType"); request.setExpires("Expires"); // 设置自定义元数据 request.addUserMetadata("property1", "property-value1"); ObjectMetadata metadata = obsClient.setObjectMetadata(request); Log.i("\t" + metadata.getUserMetadata("property1")); 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在发送请求时对您头域中的中文汉字进行 url 编码,发送编码后数据。如您设置的值 content-disposition 为 ”attachment; filename="中文.txt"”,则对象元数据中存储的信息为”attachment; filename="%E4%B8%AD%E6%96%87.txt"”。使用浏览器访问时浏览器将会自动解码。 如若不需要 SDK 帮您编码,可以调用 SetObjectMetadataRequest.setIsEncodeHeaders(false) 关闭自动编码。 父主题: 管理对象
  • 重写响应头 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 下载对象时,可以重写部分HTTP/HTTPS响应头信息。可重写的响应头信息见下表: 参数 作用 OBS Android SDK对应方法 contentType 重写HTTP/HTTPS响应中的Content-Type ObjectRepleaceMetadata.setContentType contentLanguage 重写HTTP/HTTPS响应中的Content-Language ObjectRepleaceMetadata.setContentLanguage expires 重写HTTP/HTTPS响应中的Expires ObjectRepleaceMetadata.setExpires cacheControl 重写HTTP/HTTPS响应中的Cache-Control ObjectRepleaceMetadata.setCacheControl contentDisposition 重写HTTP/HTTPS响应中的Content-Disposition ObjectRepleaceMetadata.setContentDisposition contentEncoding 重写HTTP/HTTPS响应中的Content-Encoding ObjectRepleaceMetadata.setContentEncoding 以下代码展示了如何重写响应头: // 认证用的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); GetObjectRequest request = new GetObjectRequest("bucketname", "objectname"); ObjectRepleaceMetadata replaceMetadata = new ObjectRepleaceMetadata(); replaceMetadata.setContentType("image/jpeg"); request.setReplaceMetadata(replaceMetadata); ObsObject obsObject = obsClient.getObject(request); Log.i("GetObject", object.getMetadata().getContentType()); obsObject.getObjectContent().close(); 父主题: 下载对象
  • 为桶设置预定义访问策略 以下代码展示如何为桶设置预定义访问策略: // 认证用的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.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()); 父主题: 管理桶
共100000条