华为云用户手册

  • 请求参数 字段名 类型 约束 说明 Bucket String 必选 桶名。 Key String 必选 对象名。 VersionId String 可选 对象的版本号。 ACL String 可选 预定义访问策略。 Owner Object 可选 对象的所有者。 ID String 必选 对象所有者的DomainId。 Delivered Boolean 可选 桶的ACL是否向桶内对象传递。 Grants Array 可选 被授权用户权限信息列表。 Grantee Object 必选 被授权用户。 Type String 必选 被授权的用户类型。 ID String 如果Type为“CanonicalUser”则必选,否则必须为空 被授权用户的DomainId。 URI String 如果Type为“Group”则必选,否则必须为空 被授权的用户组。 Permission String 必选 被授予的权限。 Owner和Grants必须配套使用,且与ACL互斥。当设置了这两个字段时,不能设置ACL;反之,当设置了ACL时,不能设置Owner和Grants。 Owner、Grants与ACL不能全为空。
  • 返回结果(InterfaceResult) 字段名 类型 说明 RequestId String OBS服务端返回的请求ID。 ETag String 对象的ETag值。 NextPosition String 下次追加上传的位置。 StorageClass String 对象的存储类型,当对象存储类型是标准存储时,该值为空。 SseKms String SSE-KMS方式的算法。 SseKmsKey String SSE-KMS方式的密钥。 SseC String SSE-C方式的算法。 SseCKeyMd5 String SSE-C方式的密钥的MD5值。
  • 请求参数 字段名 类型 约束 说明 Bucket String 必选 桶名。 Key String 必选 对象名。 Position Number 必选 追加上传的位置,第一次追加上传时必须为0。 ACL String 可选 创建对象时可指定的预定义访问策略。 StorageClass String 可选 创建对象时可指定的对象的存储类型。 Body String 或 stream.Readable 可选 待上传对象的内容,支持字符串和stream.Readable对象。 Offset Number 可选 当设置了SourceFile时有效,代表源文件中某一分段的起始偏移大小,默认值为0, 单位为字节。 SourceFile String 可选 待上传对象的源文件路径。 Metadata Object 可选 待上传对象的自定义元数据。 WebsiteRedirectLocation String 可选 当桶设置了Website配置,该参数指明对象的重定向地址。 Expires Number 可选 待上传对象的生命周期,单位:天。 SuccessActionRedirect String 可选 上传对象成功后的重定向的地址。 ContentType String 可选 待上传对象的MIME类型。 ContentLength Number 可选 当设置了SourceFile时有效,代表待上传对象数据的长度。 ContentMD5 String 可选 待上传对象数据的MD5值(经过Base64编码),提供给OBS服务端,校验数据完整性。 SseKms String 可选 以SSE-KMS方式加密对象,支持的值: kms SseKmsKey String 可选 SSE-KMS方式下加密的主密钥,可为空。 SseC String 可选 以SSE-C方式加密对象,支持的值: AES256 SseCKey Buffer 可选 SSE-C方式下加密的密钥,由AES256算法得到。 Body与SourceFile不能同时使用。 当Body与SourceFile都为空时,上传对象的大小为0字节。
  • 参数描述 字段名 类型 约束 说明 key string 必选 访问密钥中的AK。 secret string 必选 访问密钥中的SK。 endpoint string 必选 连接OBS的服务地址。包含协议类型、域名(或IP)、端口号。示例:https://your-endpoint:443。 您可以从这里查看OBS当前开通的服务地址。 ssl_verify boolean 或 string 可选 验证服务端证书参数。可能的取值: 服务端pem格式根证书文件路径; true:使用默认的CAs验证服务端证书; false:表示不验证服务端证书。 默认为false。 max_retry_count integer 可选 HTTP/HTTPS连接异常时的请求重试次数。默认为3次。 socket_timeout integer 可选 Socket层传输数据的超时时间(单位:秒)。默认为60秒。 connect_timeout integer 可选 建立HTTP/HTTPS连接的超时时间(单位:秒)。默认为60秒。 chunk_size integer 可选 读socket流时的块大小(单位:字节)。默认为65536字节。
  • 返回结果(InterfaceResult) 字段名 类型 说明 RequestId String OBS服务端返回的请求ID。 Size String 桶的空间大小。 ObjectNumber String 桶内对象个数。 StandardSize String 返回标准存储类型存量大小 StandardObjectNumber String 返回标准存储类型对象个数 WarmSize String obs请求时返回低频存储类型存量大小 WarmObjectNumber String obs请求时返回低频存储类型对象个数 ColdSize String obs请求时返回归档存储类型存量大小 ColdObjectNumber String obs请求时返回归档存储类型对象个数 DeepArchiveSize String 返回深度归档存储类型存量大小 DeepArchiveObjectNumber String 返回深度归档存储类型对象个数 HighPerformanceSize String 返回高性能存储类型存量大小 HighPerformanceObjectNumber String 返回高性能存储类型对象个数 Standard_IASize String s3请求时返回低频存储类型存量大小 Standard_IAObjectNumber String s3请求时返回低频存储类型对象个数 GlacierSize String s3请求时返回归档存储类型存量大小 GlacierObjectNumber String s3请求时返回归档存储类型对象个数
  • 代码样例 // 创建ObsClient实例 var obsClient = new ObsClient({ // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.AccessKeyID, secret_access_key: process.env.SecretAccessKey, timeout : 300, //这里以华北-北京四为例,其他地区请按实际情况填写 server: 'https://obs.cn-north-4.myhuaweicloud.com' });
  • 参数描述 字段名 类型 约束 说明 access_key_id String 可选 访问密钥中的AK。 secret_access_key String 可选 访问密钥中的SK。 server String 必选 连接OBS的服务地址。可包含协议类型、域名、端口号。示例:https://your-endpoint:443。 您可以从这里查看OBS当前开通的服务地址。 timeout Number 可选 HTTP/HTTPS请求的总超时时间(单位:秒)。默认为300秒。如网络状况不佳或者上传文件较大,建议增大timeout的值。 is_cname Boolean 可选 是否通过自定义域名访问OBS服务。默认为false。 useRawXhr Boolean 可选 是否使用原生XHR发送Ajax请求。默认为false。
  • 恢复多版本归档存储对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.restoreObject接口传入版本号(versionId)来恢复多版本归档存储对象,示例代码如下: // 认证用的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); RestoreObjectRequest request = new RestoreObjectRequest("bucketname", "objectname", 1); // 使用快速恢复方式,恢复多版本对象 request.setRestoreTier(RestoreTierEnum.EXPEDITED); request.setVersionId("versionid"); obsClient.restoreObject(request); 父主题: 多版本控制
  • 透传访问密钥 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 OBS Android SDK提供了直接在接口方法中透传AK和SK的OBS客户端(SecretFlexibleObsClient)。示例代码如下: String endPoint = "https://your-endpoint"; // 创建ObsConfiguration配置类实例 ObsConfiguration config = new ObsConfiguration(); config.setEndPoint(endPoint); // 创建SecretFlexibleObsClient实例 SecretFlexibleObsClient obsClient = new SecretFlexibleObsClient(config); // 使用访问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 ak1 = System.getenv("ACCESS_KEY_ID1"); String sk1 = System.getenv("SECRET_ACCESS_KEY_ID1"); obsClient.listBuckets(ak1, sk1); String ak2 = System.getenv("ACCESS_KEY_ID2"); String sk2 = System.getenv("SECRET_ACCESS_KEY_ID2"); obsClient.listBuckets(ak2, sk2); // 关闭obsClient obsClient.close(); SecretFlexibleObsClient继承自ObsClient,可作为ObsClient使用。 父主题: 初始化
  • 文件上传 开发过程中,您有任何问题可以在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); // localfile为待上传的本地文件路径,需要指定到具体的文件名 obsClient.putObject("bucketname", "objectname", new File("localfile")); // localfile2 为待上传的本地文件路径,需要指定到具体的文件名 PutObjectRequest request = new PutObjectRequest(); request.setBucketName("bucketname"); request.setObjectKey("objectname2"); request.setFile(new File("localfile2")); obsClient.putObject(request); 上传内容大小不能超过5GB。 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在发送请求时对您头域中的中文汉字进行 url 编码,发送编码后数据。如您设置的值 content-disposition 为 ”attachment; filename="中文.txt"”,则对象元数据中存储的信息为”attachment; filename="%E4%B8%AD%E6%96%87.txt"”。使用浏览器访问时浏览器将会自动解码。 如若不需要 SDK 帮您编码,可以调用 PutObjectRequest.setIsEncodeHeaders(false) 关闭自动编码。如需使用该功能,请安装最新版本的SDK。 父主题: 上传对象
  • 列举文件夹中的所有对象 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; 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()); }
  • 指定数目列举 以下代码展示如何指定数目列举对象: // 认证用的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()); }
  • 简单列举 以下代码展示如何简单列举对象,最多返回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"); // 设置列举对象名字典序在"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()); }
  • 追加上传 开发过程中,您有任何问题可以在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) 关闭自动编码。 父主题: 上传对象
  • 设置对象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);
  • 设置对象长度 您可以通过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);
  • 设置对象自定义元数据 您可以通过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);
  • 查看桶日志配置 开发过程中,您有任何问题可以在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.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");
  • 设置桶策略 您可以通过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);
  • 初始化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()); } 父主题: 标签管理
共100000条