华为云用户手册

  • 追加上传 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 追加上传可实现对同一个对象追加数据内容的功能。您可以通过ObsClient.appendObject进行追加上传。示例代码如下: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AC CES S_KEY_ID和SECRET_ACCESS_KEY_ID。// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.htmlString 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.htmlString 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.htmlString 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.htmlString 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.htmlString 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);//1MBobsClient.putObject("bucketname", "objectname", new File("localfile"), metadata);
  • 配置SDK日志 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 OBS Android SDK基于java.util.logging库提供了日志功能,您可以通过LogConfigurator.enableLog开启或LogConfigurator.disableLog关闭日志功能。示例代码如下: // 设置日志的级别。默认为LogConfigurator.WARNLogConfigurator.setLogLevel(LogConfigurator.INFO);// 设置保留日志文件的个数。默认为10LogConfigurator.setLogFileRolloverCount(5);// 设置每个日志文件的大小,单位:字节。默认为不限制LogConfigurator.setLogFileSize(1024 * 1024 * 10);// 设置日志文件存放的目录,默认存放在SD卡的logs目录下。此处以“/storage/sdcard”为例,用户可根据自身情况调整LogConfigurator.setLogFileDir("/storage/sdcard");// 开启日志LogConfigurator.enableLog();// 关闭日志LogConfigurator.disableLog(); 日志功能默认是关闭的,需要主动开启。 您可以从 日志分析 章节获取更多关于SDK日志的介绍。 如果不设置日志文件存放的目录,日志文件默认存放于SD卡的logs目录下。 父主题: 初始化
  • 配置OBS客户端 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 当使用配置类(ObsConfiguration)创建OBS客户端(ObsClient)时,您可通过ObsConfiguration配置类对ObsClient进行配置,可配置代理、连接超时、最大连接数等参数。通过ObsConfiguration可以设置的参数见下表: 参数 描述 方法 建议值 connectionTimeout 建立HTTP/HTTPS连接的超时时间(单位:毫秒)。默认为60000毫秒。 ObsConfiguration.setConnectionTimeout [10000, 60000] socketTimeout Socket层传输数据的超时时间(单位:毫秒)。默认为60000毫秒。 ObsConfiguration.setSocketTimeout [10000, 60000] idleConnectionTime 如果空闲时间超过此参数的设定值,则关闭连接(单位:毫秒)。默认为30000毫秒。 ObsConfiguration.setIdleConnectionTime 默认 maxIdleConnections 连接池中最大空闲连接数,默认值:1000。 ObsConfiguration.setMaxIdleConnections N/A maxConnections 最大允许的HTTP并发请求数。默认为1000。 ObsConfiguration.setMaxConnections 默认 maxErrorRetry 请求失败(请求异常、服务端报500或503错误等)后最大的重试次数。默认3次。 说明: 该参数对于上传对象和下载对象接口时,当上传或下载已经进入数据流处理阶段后产生异常中断,此时将不会重试。 ObsConfiguration.setMaxErrorRetry [0, 5] endPoint 连接OBS的服务地址。可包含协议类型、 域名 、端口号。示例:https://your-endpoint:443。 (出于安全性考虑,建议使用https协议) ObsConfiguration.setEndPoint N/A httpProxy HTTP代理配置。默认为空。 ObsConfiguration.setHttpProxy N/A validateCertificate 是否验证服务端证书。默认为false。 ObsConfiguration.setValidateCertificate N/A verifyResponseContentType 是否验证响应头信息的ContentType。默认为true。 ObsConfiguration.setVerifyResponseContentType 默认 uploadStreamRetryBufferSize 上传流对象时使用的缓存大小(单位:字节)。默认为512KB。 ObsConfiguration.setUploadStreamRetryBufferSize N/A readBufferSize 从Socket流下载对象的缓存大小(单位:字节),-1表示不设置缓存。默认为-1。 ObsConfiguration.setReadBufferSize N/A writeBufferSize 上传对象到Socket流时的缓存大小(单位:字节),-1表示不设置缓存。默认为-1。 ObsConfiguration.setWriteBufferSize N/A socketWriteBufferSize Socket发送缓冲区大小(单位:字节),对应java.net.SocketOptions.SO_SNDBUF参数。默认为-1表示不设置。 ObsConfiguration.setSocketWriteBufferSize 默认 socketReadBufferSize Socket接收缓冲区大小(单位:字节),对应java.net.SocketOptions.SO_RCVBUF参数。默认为-1表示不设置。 ObsConfiguration.setSocketReadBufferSize 默认 keyManagerFactory 用于生成javax.net.ssl.KeyManager的工厂。默认为空。 ObsConfiguration.setKeyManagerFactory N/A trustManagerFactory 用于生成javax.net.ssl.TrustManager的工厂。默认为空。 ObsConfiguration.setTrustManagerFactory N/A isStrictHostnameVerification 是否严格验证服务端主机名。默认为false。 ObsConfiguration.setIsStrictHostnameVerification N/A keepAlive 是否使用长连接访问OBS服务。默认为true。 ObsConfiguration.setKeepAlive N/A cname 是否通过自定义域名访问OBS服务。默认为false。 ObsConfiguration.setCname N/A sslProvider SSLContext的Provider,默认使用JDK提供的SSLContext。 ObsConfiguration.setSslProvider N/A httpProtocolType 访问OBS服务端时使用的HTTP协议类型。默认为HTTP1.1协议。 ObsConfiguration.setHttpProtocolType N/A httpDispatcher 自定义分发器。 ObsConfiguration.setHttpDispatcher N/A 建议值为N/A的表示需要根据实际情况进行设置。 如需提高大文件上传下载性能,在网络带宽满足的情况下,可对socketWriteBufferSize,sockeReadBufferSize,readBufferSize,writeBufferSize四个参数进行调优。 如网络状况不佳,建议增大connectionTimeout和socketTimeout的值。 如果设置的endPoint不带协议类型,则默认使用HTTPS协议。 出于DNS解析性能和OBS服务可靠性的考虑,不允许将endPoint设置为IP,必须使用域名访问OBS服务。 父主题: 初始化
  • 设置桶配额 您可以通过ObsClient.setBucketQuota设置桶配额。以下代码展示如何设置桶配额: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.htmlString 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);// 设置桶配额为100MBBucketQuota quota = new BucketQuota(1024 * 1024 * 100);obsClient.setBucketQuota("bucketname", quota); 桶配额值必须为非负整数,单位为字节,支持的最大值为263 - 1。
  • 获取桶配额 您可以通过ObsClient.getBucketQuota获取桶配额。以下代码展示如何获取桶配额: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.htmlString 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());
  • 设置对象转换策略 以下代码展示了如何设置最新版本对象和历史版本对象的转换策略: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.htmlString 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.htmlString 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());}
  • 列举文件夹中的所有对象 OBS本身是没有文件夹的概念的,桶中存储的元素只有对象。文件夹对象实际上是一个大小为0且对象名以“/”结尾的对象,将这个文件夹对象名作为前缀,即可模拟列举文件夹中对象的功能。以下代码展示如何列举文件夹中的对象: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.htmlString 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.htmlString 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.htmlString 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.htmlString 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.htmlString 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.htmlString 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包含的是文件夹的子文件夹。
  • 限定条件下载 开发过程中,您有任何问题可以在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.htmlString 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,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 下载对象时,可以重写部分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.htmlString 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对应值 快速恢复 恢复耗时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.htmlString 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指定恢复选项,表示恢复对象所耗的时间。 父主题: 下载对象
  • SDK自定义异常 SDK自定义异常(ObsException)是由ObsClient统一抛出的异常,继承自java.lang.RuntimeException类。通常是OBS服务端错误,包含OBS错误码、错误信息等,便于用户定位问题,并做出适当的处理。 ObsException通常包含以下错误信息: ObsException.getResponseCode:HTTP状态码。 ObsException.getErrorCode:OBS服务端错误码。 ObsException.getErrorMessage:OBS服务端错误描述。 ObsException.getErrorRequestId:OBS服务端返回的请求ID。 ObsException.getErrorHostId:请求的服务端ID。 ObsException.getResponseHeaders:HTTP响应头信息。 父主题: 异常处理
  • 查看桶标签 开发过程中,您有任何问题可以在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.htmlString 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());} 父主题: 标签管理
  • 配置默认主页和错误页面 以下代码展示了如何配置默认主页和错误页面: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.htmlString 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.htmlString 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.htmlString 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和httpsredirectAll.setRedirectProtocol(ProtocolEnum.HTTP);config.setRedirectAllRequestsTo(redirectAll);obsClient.setBucketWebsite("bucketname", config);
  • 加密说明 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 OBS Android SDK支持服务端加密的接口见下表: OBS Android SDK接口方法 描述 支持加密类型 ObsClient.putObject 上传对象时设置加密算法、密钥,对对象启用服务端加密。 SSE-KMS SSE-C ObsClient.getObject 下载对象时设置解密算法、密钥,用于解密对象。 SSE-C ObsClient.copyObject 复制对象时设置源对象的解密算法、密钥,用于解密源对象。 复制对象时设置目标对象的加密算法、密钥,对目标对象启用加密算法。 SSE-KMS SSE-C ObsClient.getObjectMetadata 获取对象元数据时设置解密算法、密钥,用于解密对象。 SSE-C ObsClient.initiateMultipartUpload 初始化分段上传任务时设置加密算法、密钥,对分段上传任务最终生成的对象启用服务端加密。 SSE-KMS SSE-C ObsClient.uploadPart 上传段时设置加密算法、密钥,对分段数据启用服务端加密。 SSE-C ObsClient.copyPart 复制段时设置源对象的解密算法、密钥,用于解密源对象。 复制段时设置目标段的加密算法、密钥,对目标段启用加密算法。 SSE-C 父主题: 服务端加密
  • 创建rf_admin_trust委托(可选) 进入华为云官网,打开控制台管理界面,鼠标移动至个人账号处,打开“ 统一身份认证 ”菜单。 图1 控制台管理界面 图2 统一身份认证菜单 进入“委托”菜单,搜索“rf_admin_trust”委托。 图3 委托列表 如果委托存在,则不用执行接下来的创建委托的步骤 如果委托不存在时执行接下来的步骤创建委托 单击步骤2界面中的“创建委托”按钮,在委托名称中输入“rf_admin_trust”,选择“云服务”,选择“ RFS ”,单击“完成”。 图4 创建委托 单击“立即授权”。 图5 委托授权 在搜索框中输入“Tenant Administrator”权限,并勾选搜索结果,单击“下一步”。 图6 选择策略 选择“所有资源”,并单击“确定”完成配置。 图7 设置最小授权范围 “委托”列表中出现“rf_admin_trust”委托则创建成功。 图8 委托列表
  • 资源和成本规划 该解决方案主要部署如下资源,不同产品的花费仅供参考,实际以收费账单为准,具体请参考华为云官网价格: 表1 资源和成本规划(包年包月) 华为云服务 配置示例 每月预估花费 弹性云服务器 E CS 区域:华北-北京四 计费模式:包年包月 规格:X86计算 | ECS | s6.large.2 | 2vCPUs | 4GiB 镜像:CentOS 7.8 64bit 系统盘:高IO | 40GB 数据盘:通用型SSD | 100GB 购买时长:1个月 购买量:1 236.20元 弹性公网IP EIP 区域:华北-北京四 计费模式:包年包月 线路:全动态BGP 公网带宽:按带宽计费 带宽大小:5Mbit/s 购买时长:1个月 购买量:1 115.00元 合计 351.20 元 表2 资源和成本规划(按需计费) 华为云服务 计费说明 每月花费 弹性云服务器 按需计费:0.48/小时 区域:华北-北京四 计费模式:按需计费 规格:X86计算 | ECS | s6.large.2 | 2vCPUs | 4GiB 镜像:CentOS 7.8 64bit 系统盘:高IO | 40GB 数据盘:通用型SSD | 100GB 购买时长:1个月 购买量:1 345.60元 弹性公网IP 按需计费(按带宽计费):0.34元/5M/小时 区域:华北-北京四 计费模式:按带宽计费 线路:全动态BGP 公网带宽:按带宽计费 带宽大小:5Mbit/s 购买时长:1个月 购买量:1 244.80元 合计 590.40元
  • 安全组规则修改(可选) 该解决方案使用22端口用来远程登录弹性云服务器 ECS,默认对该方案创建的VPC子网网段放开,请参考修改安全组规则,配置IP地址白名单,以便能正常访问服务。 安全组实际是网络流量访问策略,包括网络流量入方向规则和出方向规则,通过这些规则为安全组内具有相同保护需求并且相互信任的云服务器、云容器、云数据库等实例提供安全保护。 如果您的实例关联的安全组策略无法满足使用需求,比如需要添加、修改、删除某个TCP端口,请参考以下内容进行修改。 添加安全组规则:根据业务使用需求需要开放某个TCP端口,请参考添加安全组规则添加入方向规则,打开指定的TCP端口。 修改安全组规则:安全组规则设置不当会造成严重的安全隐患。您可以参考修改安全组规则,来修改安全组中不合理的规则,保证云服务器等实例的网络安全。 删除安全组规则:当安全组规则入方向、出方向源地址/目的地址有变化时,或者不需要开放某个端口时,您可以参考删除安全组规则进行安全组规则删除。
  • 约束与限制 部署该解决方案之前,需 注册华为账号 并开通华为云,完成实名认证,且账号不能处于欠费或冻结状态,请根据 资源和成本规划 预估价格,确保余额充足。如果计费模式选择“包年包月”,请确保账户余额充足以便一键部署资源的时候可以自动支付;或者在一键部署的过程进入费用中心,找到“待支付订单”并手动完成支付。 该解决方案部署成功后,搭建WGCLOUD运维监控平台大约用时10分钟,完成后方可参考开始使用进行验证。 如果选用 IAM 委托权限部署资源,请确保使用的华为云账号有IAM的足够权限,具体请参考创建rf_admin_trust委托(可选);如果使用华为主账号或admin用户组下的IAM子账户可不选委托,将采用当前登录用户的权限进行部署。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全