华为云用户手册

  • 删除单个对象 您可以通过ObsClient.deleteObject删除单个对象。以下代码展示如何删除单个对象: // 认证用的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.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());
  • 列举文件夹中的所有对象 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); 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"); request.setMaxKeys(1000); // 设置文件夹分隔符"/" request.setDelimiter("/"); ObjectListing result = obsClient.listObjects(request); Log.i("ListObjects", "Objects in the root directory:"); for(ObsObject obsObject : result.getObjects()){ Log.i("ListObjects","\t" + obsObject.getObjectKey()); Log.i("ListObjects","\t" + obsObject.getOwner()); } listObjectsByPrefix(obsClient, request, result); 递归列出子文件夹中对象的函数listObjectsByPrefix的示例代码如下: static void listObjectsByPrefix(ObsClient obsClient, ListObjectsRequest request, ObjectListing result) throws ObsException { for(String prefix : result.getCommonPrefixes()){ Log.i("ListObjects", "Objects in folder [" + prefix + "]:"); request.setPrefix(prefix); result = obsClient.listObjects(request); for(ObsObject obsObject : result.getObjects()){ Log.i("ListObjects","\t" + obsObject.getObjectKey()); Log.i("ListObjects","\t" + obsObject.getOwner()); } listObjectsByPrefix(obsClient, request, result); } } 以上代码示例没有考虑文件夹中对象数超过1000个的情况。 由于是需要列举出文件夹中的对象和子文件夹,且文件夹对象总是以“/”结尾,因此delimiter总是为“/”。 每次递归的返回结果中ObjectListing.getObjects包含的是文件夹中的对象;ObjectListing.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实例 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"); // 设置列举对象名字典序在"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()); }
  • 分页列举全部对象 以下代码展示分页列举全部对象: // 认证用的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; 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"); // 设置列举带有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()); }
  • 简单列举 以下代码展示如何简单列举对象,最多返回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); 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,或者在华为云 对象存储服务 论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 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指定图片处理参数。 图片处理参数支持级联处理,可对图片文件依次执行多条命令。 父主题: 下载对象
  • 重写响应头 开发过程中,您有任何问题可以在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(); 父主题: 下载对象
  • 限定条件下载 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 下载对象时,可以指定一个或多个限定条件,满足限定条件时则进行下载,否则抛出异常,下载对象失败。 您可以使用的限定条件如下: 参数 作用 OBS Android SDK对应方法 If-Modified-Since 如果对象在指定的时间后有修改,则返回对象内容,否则返回错误。 GetObjectRequest.setIfModifiedSince If-Unmodified-Since 如果对象在指定的时间后没有修改,则返回对象内容,否则返回错误。 GetObjectRequest.setIfUnmodifiedSince If-Match 如果对象的ETag值与该参数值相同,则返回对象内容,否则抛出异常。 GetObjectRequest.setIfMatchTag If-None-Match 如果对象的ETag值与该参数值不相同,则返回对象内容,否则抛出异常。 GetObjectRequest.setIfNoneMatchTag 对象的ETag值是指对象数据的MD5校验值。 如果包含If-Unmodified-Since并且不符合或者包含If-Match并且不符合,抛出异常中HTTP状态码为:412 precondition failed。 如果包含If-Modified-Since并且不符合或者包含If-None-Match并且不符合,抛出异常中HTTP状态码为:304 Not Modified。 以下代码展示了如何进行限定条件下载: // 认证用的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); request.setIfModifiedSince(new SimpleDateFormat("yyyy-MM-dd").parse("2016-01-01")); ObsObject obsObject = obsClient.getObject(request); obsObject.getObjectContent().close(); 父主题: 下载对象
  • 获取下载进度 开发过程中,您有任何问题可以在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(); 支持获取下载进度的接口包括:流式下载、范围下载和断点续传下载。 父主题: 下载对象
  • 设置对象生命周期 开发过程中,您有任何问题可以在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); try { PutObjectRequest request = new PutObjectRequest(); request.setBucketName("examplebucket"); request.setObjectKey("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); System.out.println("putObject successfully"); } catch (ObsException e) { System.out.println("putObject 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("putObject failed"); // 其他异常信息打印 e.printStackTrace(); } 该方式仅支持设置以天为单位的对象过期时间,过期后的对象会被OBS服务端自动清理。 该方式设置的对象过期时间,其优先级高于桶生命周期规则。 父主题: 上传对象
  • 设置对象存储类型 您可以通过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);
  • 设置对象自定义元数据 您可以通过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);
  • 设置对象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.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);
  • 创建文件夹 开发过程中,您有任何问题可以在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/。 父主题: 上传对象
  • 获取上传进度 开发过程中,您有任何问题可以在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,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 在OBS中,用户操作的基本数据单元是对象。OBS Android SDK提供了丰富的对象上传接口,可以通过以下方式上传对象: 流式上传 文件上传 分段上传 追加上传 断点续传上传 基于表单上传 SDK支持上传0KB~5GB的对象。流式上传、文件上传和追加上传的内容大小不能超过5GB;当上传较大文件时,请使用分段上传,分段上传每段内容大小不能超过5GB;基于表单上传提供了基于浏览器表单上传对象的方式。 如果上传的对象权限设置为匿名用户读取权限,对象上传成功后,匿名用户可通过链接地址访问该对象数据。对象链接地址格式为:https://桶名. 域名 /文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 以下示例代码中的"bucketname"为待上传对象的目标桶的名称;"objectname"为上传后,期望在桶内生成的目标对象名称,可指定文件夹目录层级,例如src/src1/src2/test.txt。如果不指定目录层级,则该对象上传到桶的根目录下。 父主题: 上传对象
  • 获取桶配额 您可以通过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.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.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); 创建桶时可以指定桶的区域位置,请参见创建桶。 父主题: 管理桶
共100000条