华为云用户手册

  • SMS .3806 源端连接目的端22端口发生错误,连接拒绝 出现该提示是由于 openssh报错"connect refused",表示目的端IP拒绝连接。请根据以下原因进行排查处理: 请检查安全组,防火墙,ACL规则是否允许源端访问目的端IP 检查源端到目的端的网络中是否存在安全组、防火墙或ACL规则的拦截。如果存在,请调整规则以允许源端访问目的端的IP地址,并重试迁移任务。 确认目的端网络的连通性,如果使用的是私有网络,需要确认是否在同一网段 使用SSH或Telnet等工具测试源端到目的端的网络连通性。如果测试无法连接,需要进一步排查网络配置、防火墙设置或网络限制。 命令格式如下: telnet {目的端IP地址} {端口} ssh {目的端IP地址} {端口} 例如,测试目的端IP地址为192.168.0.x的22端口,使用以下命令: telnet 192.168.0.x 22 ssh 192.168.0.x 22
  • 操作步骤 登录 主机迁移服务 管理控制台。 在左侧导航树中,单击“迁移服务器”,进入迁移服务器列表页面。 在迁移服务器列表页面找到待迁移的服务器,单击“迁移阶段/实时状态”或“操作”列的“开始”,右侧弹出“开始”窗口,单击“确定”,开始全量复制。 或勾选待迁移的服务器,单击服务器列表上方的“开始”,右侧弹出“开始”窗口,单击“确定”,开始全量复制。 图1 开始全量复制 在全量复制过程中,系统默认将您的目的端锁定并不可操作,迁移完成后将自动解锁目的端服务器。如您在迁移过程中,需要操作目的端,可解锁目的端,具体操作参见解锁目的端。 迁移过程中,您可以服务器列表中,单击源端服务器名称,查看迁移进度。 全量复制完成。 在设置迁移目的端“持续同步”选择“否”时,全量复制完成后系统会自动进入下一步:启动目的端,并且启动目的端无需手动操作,系统会自动启动目的端。 在设置迁移目的端“持续同步”选择“是”时,“迁移实时状态”为“持续同步”,说明全量复制已完成。在“启动目的端”之前,系统会自动把源端新增或修改的磁盘数据持续同步到目的端。“启动目的端”需要手动操作,您可参考启动目的端来启动目的端。 在 主机迁移 并割接完成后,通常还需要您根据业务需要对目的端服务器进行一些额外的配置调整。详细介绍请参考主机迁移完成后还需要手动修改哪些配置项?
  • 应用场景简介 IVS支持通过企业项目管理(EPS)对不同用户组和用户的资源使用,进行分账。企业可以根据组织架构规划不同的企业项目,并为每个企业项目设置拥有不同权限的用户组和用户,多个企业项目之间相互独立,资源分开结算。 企业账号可申请开通企业项目。账号需要进行企业实名认证。如果企业账号注册成为华为云合作伙伴,将无法进入企业项目管理页面。 开通企业项目后,企业项目内的用户在调用IVS API时,只有在请求Header参数中传入Enterprise-Project-Id(企业项目ID)后,才支持按不同企业项目进行财务统计。传参方式详见API文档。 该功能仅支持开通在华北-北京四区域的API,不同API的部署情况请参见终端节点。 图1 企业项目管理示意图 父主题: 企业项目管理
  • 约束与限制 只支持“华北-北京四”区域。 只支持中国大陆身份证的识别。 只支持JPG格式,图片中人像需无遮挡。 图像数据,base64编码,要求base64编码后大小不超过4MB。 图像各边的像素大小在300到8000px之间。 图像中身份证区域有效占比超过15%,保证整张身份证内容及其边缘包含在图像内。 支持图像中身份证要求水平放置。 目前支持检测视频文件,或视频的Base64编码,不支持直接检测视频流,需要用户客户端自己获取视频流并保存成文件,然后调用活体检测接口。 视频文件大小不超过8MB,建议客户端压缩到200KB~2MB。 限制视频时长1~15秒。 建议帧率10fps~30fps。 封装格式:mp4、avi、flv、webm、asf、mov。 视频编码格式:h261、h263、h264、hevc、vc1、vp8、vp9、wmv3。 父主题: 使用前必读
  • 约束与限制 只支持“华北-北京一”、“华北-北京四”区域。 只支持中国大陆身份证的识别。 支持港澳台居住证核验,证件信息需文本输入 只支持JPG格式,图片中人像需无遮挡。 图像数据,base64编码,要求base64编码后大小不超过4MB。 图像各边的像素大小在300到8000px之间。 图像中身份证区域有效占比超过15%,保证整张身份证内容及其边缘包含在图像内。 支持图像中身份证要求水平放置。 暂无安卓和IOS系统的SDK。
  • 计费项 华为 云消息 通知服务对 消息通知 费用、外网下行流量计费,具体的计费详情请参见价格详情。 表1 计费项说明 计费项 计费说明 消息通知 SMS:统计每月每个区域每个主题的发送条数,按数量收费。短信条数计算规则请参考《消息&短信服务产品介绍》中“内容长度计算规则”章节。 说明: 全球短信:发送即计费,即 SMN 侧调用供应商接口成功则计费。 中国大陆短信:短信发送成功才计费。 电子邮件:统计每月每个区域每个主题的发送邮件数,按数量收费。 HTTP(S):统计每月每个区域每个主题的发送请求数量,每月100万次为单位计费。 FunctionGraph:发送到FunctionGraph免费。 发送请求订阅消息也会作为发送条数进行计费。 外网下行流量 仅在您有数据传输到Internet时收取,每月前1GB流量免费,之后按照华为云标准流量费用每GB收取。 所有的用量统计按照自然月计算。
  • 访问消息通知服务的方式 云平台提供了Web化的服务管理平台,即管理控制台和基于HTTPS请求的API(Application programming interface)管理方式。 管理控制台方式 管理控制台提供Web界面,供您管理计算、存储和其他云资源。你可以使用管理控制台方式访问消息通知服务。登录管理控制台,从主页选择“消息通知服务”。 API方式 如果用户需要将云平台上的消息通知服务集成到第三方系统,用于二次开发,请使用API方式访问消息通知服务,具体操作请参见《消息通知服务API参考》。
  • 计费项 华为云消息通知服务对消息通知费用、外网下行流量计费,具体的计费详情请参见价格详情。 表1 计费项说明 计费项 计费说明 消息通知 SMS:统计每月每个区域的发送条数,按数量收费。 电子邮件:统计每月每个区域的发送邮件数,按数量收费。 HTTP(S):统计每月每个区域的发送请求数量,每月100万次为单位计费。 FunctionGraph:发送到FunctionGraph免费。 外网下行流量 仅在您有数据传输到Internet时收取,每月前1GB流量免费,之后按照华为云标准流量费用每GB收取。
  • 设置对象属性 您可以通过ObsClient.setObjectMetadata来设置对象属性,包括对象自定义元数据等信息。 除了 HTTP 标准头域外,您也可以指定自定义元数据,自定义元数据仅支持英文字符、数字与中划线【-】。 以下代码展示了如何设置对象属性: // 认证用的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实例 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,或者在华为云 对象存储服务 论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 文件上传使用本地文件作为对象的数据源。以下代码展示了如何进行文件上传: // 认证用的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 { // 文件上传 // localfile 为待上传的本地文件路径,需要指定到具体的文件名 PutObjectRequest request = new PutObjectRequest(); request.setBucketName("examplebucket"); request.setObjectKey("objectkey"); request.setFile(new File("localfile")); obsClient.putObject(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(); } 上传内容大小不能超过5GB。 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在发送请求时对您头域中的中文汉字进行 url 编码,发送编码后数据。如您设置的值 content-disposition 为“attachment; filename="中文.txt"” ,则对象元数据中存储的信息为“attachment; filename="%E4%B8%AD%E6%96%87.txt"”。使用浏览器访问时浏览器将会自动解码。 如果不需要 SDK 帮您编码,可以调用 PutObjectRequest.setIsEncodeHeaders(false) 关闭自动编码。如需使用该功能,请安装最新版本的SDK。 父主题: 上传对象
  • 范围下载 开发过程中,您有任何问题可以在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.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) 关闭自动编码。 父主题: 上传对象
  • 获取对象属性 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.getObjectMetadata来获取对象属性,包括对象长度,对象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实例 final ObsClient obsClient = new ObsClient(ak, sk, endPoint); ObjectMetadata metadata = obsClient.getObjectMetadata("bucketname", "objectname"); Log.i("GetObjectMetadata","\t" + metadata.getContentType()); Log.i("GetObjectMetadata","\t" + metadata.getContentLength()); // 获取用户自定义元数据 Log.i("GetObjectMetadata","\t" + metadata.getUserMetadata("property")); // 获取所有原始响应头域 Log.i("GetObjectMetadata","\t" + metadata.getOriginalHeaders()); 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在接收响应时使用 url 解码规则解码响应头中的信息,。如您的元数据存储的 content-disposition 为“attachment; filename="%E4%B8%AD%E6%96%87.txt"”,则 SDK 获取结果为“attachment; filename="中文.txt"”。 如果不需要 SDK 帮您解码,可以调用 GetObjectMetadataRequest.setIsEncodeHeaders(false) 关闭自动解码。 您也可以通过 metadata.getOriginalHeaders 获取所有原始响应头的信息。 父主题: 管理对象
  • 设置桶存储类型 您可以通过ObsClient.setBucketStoragePolicy设置桶存储类型。以下代码展示如何设置桶存储类型: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 设置桶的存储类型为低频访问存储. BucketStoragePolicyConfiguration storgePolicy = new BucketStoragePolicyConfiguration(); storgePolicy.setBucketStorageClass(StorageClassEnum.WARM); obsClient.setBucketStoragePolicy("bucketname", storgePolicy);
  • 获取桶存储类型 您可以通过ObsClient.getBucketStoragePolicy获取桶存储类型。以下代码展示如何获取桶存储类型: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); BucketStoragePolicyConfiguration storagePolicy = obsClient.getBucketStoragePolicy("bucketname"); Log.i("GetBucketStoragePolicy", "\t" + storagePolicy.getBucketStorageClass());
  • 列举分段上传任务 您可以通过ObsClient.listMultipartUploads列举分段上传任务。列举分段上传任务可设置的参数如下: 参数 作用 OBS Android SDK对应方法 bucketName 桶名。 ListMultipartUploadsRequest.setBucketName prefix 限定返回的分段上传任务中的对象名必须带有prefix前缀。 ListMultipartUploadsRequest.setPrefix delimiter 用于对分段上传任务中的对象名进行分组的字符。对于对象名中包含delimiter的任务,其对象名(如果请求中指定了prefix,则此处的对象名需要去掉prefix)中从首字符至第一个delimiter之间的字符串将作为一个分组并作为commonPrefix返回。 ListMultipartUploadsRequest.setDelimiter maxUploads 列举分段上传任务的最大数目,取值范围为1~1000,当超出范围时,按照默认的1000进行处理。 ListMultipartUploadsRequest.setMaxUploads keyMarker 表示列举时返回指定的keyMarker之后的分段上传任务。 ListMultipartUploadsRequest.setKeyMarker uploadIdMarker 只有与keyMarker参数一起使用时才有意义,用于指定返回结果的起始位置,即列举时返回指定keyMarker的uploadIdMarker之后的分段上传任务。 ListMultipartUploadsRequest.setUploadIdMarker 简单列举分段上传任务 // 认证用的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"; String uploadId = "upload id from initiateMultipartUpload"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ListMultipartUploadsRequest request = new ListMultipartUploadsRequest("bucketname"); MultipartUploadListing result = obsClient.listMultipartUploads(request); for(MultipartUpload upload : result.getMultipartTaskList()){ Log.i("ListMultipartUploads","\t" + upload.getUploadId()); Log.i("ListMultipartUploads","\t" + upload.getObjectKey()); Log.i("ListMultipartUploads","\t" + upload.getInitiatedDate()); } 列举分段上传任务至多返回1000个任务信息,如果指定的桶包含的分段上传任务数量大于1000,则MultipartUploadListing.isTruncated为true表明本次没有返回全部结果,并可通过MultipartUploadListing.getNextKeyMarker和MultipartUploadListing.getNextUploadIdMarker获取下次列举的起点。 如果想获取指定桶包含的所有分段上传任务,可以采用分页列举的方式。 分页列举全部分段上传任务 // 认证用的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"; String uploadId = "upload id from initiateMultipartUpload"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); ListMultipartUploadsRequest request = new ListMultipartUploadsRequest("bucketname"); MultipartUploadListing result; do{ result = obsClient.listMultipartUploads(request); for(MultipartUpload upload : result.getMultipartTaskList()){ Log.i("ListMultipartUploads","\t" + upload.getUploadId()); Log.i("ListMultipartUploads","\t" + upload.getObjectKey()); Log.i("ListMultipartUploads","\t" + upload.getInitiatedDate()); } request.setKeyMarker(result.getNextKeyMarker()); request.setUploadIdMarker(result.getNextUploadIdMarker()); }while(result.isTruncated());
  • 初始化分段上传任务 使用分段上传方式传输数据前,必须先通知OBS初始化一个分段上传任务。该操作会返回一个OBS服务端创建的全局唯一标识(Upload ID),用于标识本次分段上传任务。您可以根据这个唯一标识来发起相关的操作,如取消分段上传任务、列举分段上传任务、列举已上传的段等。 您可以通过ObsClient.initiateMultipartUpload初始化一个分段上传任务: // 认证用的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); InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest("bucketname", "objectname"); ObjectMetadata metadata = new ObjectMetadata(); metadata.addUserMetadata("property", "property-value"); metadata.setContentType("text/plain"); request.setMetadata(metadata); InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request); String uploadId = result.getUploadId(); Log.i("InitiateMultipartUpload", "\t" + uploadId); 用InitiateMultipartUploadRequest指定上传对象的名称和所属桶。 在InitiateMultipartUploadRequest中,您可以设置对象MIME类型、对象存储类型、对象自定义元数据等对象属性。 InitiateMultipartUploadResult.getUploadId返回分段上传任务的全局唯一标识(Upload ID),在后面的操作中将用到它。 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在发送请求时对您头域中的中文汉字进行 url 编码,发送编码后数据。如您设置的值 content-disposition 为“attachment; filename="中文.txt"” ,则对象元数据中存储的信息为“attachment; filename="%E4%B8%AD%E6%96%87.txt"”。使用浏览器访问时浏览器将会自动解码。 如果不需要 SDK 帮您编码,可以调用 InitiateMultipartUploadRequest.setIsEncodeHeaders(false) 关闭自动编码。
  • 取消分段上传任务 分段上传任务可以被取消,当一个分段上传任务被取消后,就不能再使用其Upload ID做任何操作,已经上传段也会被OBS删除。 采用分段上传方式上传对象过程中或上传对象失败后会在桶内产生段,这些段会占用您的存储空间,您可以通过取消该分段上传任务来清理掉不需要的段,节约存储空间。 您可以通过ObsClient.abortMultipartUpload取消分段上传任务: // 认证用的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"; String uploadId = "upload id from initiateMultipartUpload"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); AbortMultipartUploadRequest request = new AbortMultipartUploadRequest("bucketname", "objectname", uploadId); obsClient.abortMultipartUpload(request);
  • 列举已上传的段 您可使用ObsClient.listParts列举出某一分段上传任务所有已经上传成功的段。 该接口可设置的参数如下: 参数 作用 OBS Android SDK对应方法 bucketName 分段上传任务所属的桶名。 ListPartsRequest.setBucketName key 分段上传任务所属的对象名。 ListPartsRequest.setKey uploadId 分段上传任务全局唯一标识,从ObsClient.initiateMultipartUpload返回的结果获取。 ListPartsRequest.setUploadId maxParts 表示列举已上传的段返回结果最大段数目,即分页时每一页中段数目。 ListPartsRequest.setMaxParts partNumberMarker 表示待列出段的起始位置,只有Part Number大于该参数的段会被列出。 ListPartsRequest.setPartNumberMarker 简单列举 // 认证用的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"; String uploadId = "upload id from initiateMultipartUpload"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); //列举已上传的段,其中uploadId来自于initiateMultipartUpload ListPartsRequest request = new ListPartsRequest("bucketname", "objectname"); request.setUploadId(uploadId); ListPartsResult result = obsClient.listParts(request); for(Multipart part : result.getMultipartList()){ // 分段号,上传时候指定 Log.i("ListParts", "\t"+part.getPartNumber()); // 段数据大小 Log.i("ListParts","\t"+part.getSize()); // 分段的ETag值 Log.i("ListParts","\t"+part.getEtag()); // 段的最后上传时间 Log.i("ListParts","\t"+part.getLastModified()); } 列举段至多返回1000个段信息,如果指定的Upload ID包含的段数量大于1000,则返回结果中ListPartsResult.isTruncated为true表明本次没有返回全部段,并可通过ListPartsResult.getNextPartNumberMarker获取下次列举的起始位置。 如果想获取指定Upload ID包含的所有分段,可以采用分页列举的方式。 列举所有段 由于ObsClient.listParts只能列举至多1000个段,如果段数量大于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"; String uploadId = "upload id from initiateMultipartUpload"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 列举所有已上传的段,其中uploadId来自于initiateMultipartUpload ListPartsRequest request = new ListPartsRequest("bucketname", "objectname"); request.setUploadId(uploadId); ListPartsResult result; do{ result = obsClient.listParts(request); for(Multipart part : result.getMultipartList()){ // 分段号,上传时候指定 Log.i("ListParts","\t"+part.getPartNumber()); // 段数据大小 Log.i("ListParts","\t"+part.getSize()); // 分段的ETag值 Log.i("ListParts","\t"+part.getEtag()); // 段的最后上传时间 Log.i("ListParts","\t"+part.getLastModified()); } request.setPartNumberMarker(Integer.parseInt(result.getNextPartNumberMarker())); }while(result.isTruncated());
  • 断点续传上传 开发过程中,您有任何问题可以在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) 关闭自动编码。 断点续传上传功能暂不支持暂停或取消操作。 父主题: 上传对象
  • 获取自定义元数据 开发过程中,您有任何问题可以在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); // 上传对象,设置自定义元数据 PutObjectRequest request = new PutObjectRequest("bucketname", "objectname"); ObjectMetadata metadata = new ObjectMetadata(); metadata.addUserMetadata("property", "property-value"); request.setMetadata(metadata); obsClient.putObject(request); // 下载对象,获取对象自定义元数据 GetObjectRequest request = new GetObjectRequest("bucketname", "objectname"); ObsObject obsObject = obsClient.getObject(request); // 读取对象元数据 System.out.println(obsObject.getMetadata().getContentType()); System.out.println(obsObject.getMetadata().getUserMetadata("property")); obsObject.getObjectContent().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() 获取所有原始响应头的信息。 父主题: 下载对象
  • 上传网络流 // 认证用的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); InputStream inputStream = new URL("http://www.a.com").openStream(); obsClient.putObject("bucketname", "objectname", inputStream);
  • 上传字符串(byte数组) // 认证用的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 content = "Hello OBS"; obsClient.putObject("bucketname", "objectname", new ByteArrayInputStream(content.getBytes()));
  • 上传文件流 // 认证用的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); FileInputStream fis = new FileInputStream(new File("localfile")); // localfile为待上传的本地文件路径,需要指定到具体的文件名 obsClient.putObject("bucketname", "objectname", fis); // 待上传的本地文件路径,需要指定到具体的文件名 FileInputStream fis2 = new FileInputStream(new File("localfile2")); PutObjectRequest request = new PutObjectRequest(); request.setBucketName("bucketname"); request.setObjectKey("objectname2"); request.setInput(fis2); 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) 关闭自动编码。
  • 流式下载 开发过程中,您有任何问题可以在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获取的对象输入流一定要显式关闭,否则会造成资源泄露。 父主题: 下载对象
  • OBS服务环境搭建 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 注册云服务账号 使用OBS之前必须要有一个云服务账号。 打开浏览器。 登录公有云网站www.huaweicloud.com。 在页面右上角单击“注册”。 按需填写注册信息并单击“同意协议并注册”。 开通OBS服务 使用OBS服务之前必须先充值,才能正常使用OBS服务。 登录OBS管理控制台。 单击页面右上角的“费用与成本”,单击左侧资金管理。 单击“充值”,系统自动跳转到充值窗口。 根据界面提示信息,对账户进行充值。 充值成功后,关闭充值窗口,返回管理控制台首页。 单击“对象存储服务”,开通并进入OBS管理控制台。 创建访问密钥 OBS通过用户账号中的AK和SK进行签名验证,确保通过授权的账号才能访问指定的OBS资源。以下是对AK和SK的解释说明: AK:Access Key ID,接入键标识,用户在对象存储服务系统中的接入键标识,一个接入键标识唯一对应一个用户,一个用户可以同时拥有多个接入键标识。对象存储服务系统通过接入键标识识别访问系统的用户。 SK:Secret Access Key,安全接入键,用户在对象存储服务系统中的安全接入键,是用户访问对象存储服务系统的密钥,用户根据安全接入键和请求头域生成鉴权信息。安全接入键和接入键标识一一对应。 创建访问密钥的操作步骤如下: 登录OBS控制台。 单击页面右上角的用户名,并选择“我的凭证”。 在“我的凭证”页面,单击左侧导航栏的“访问密钥”。 在“访问密钥”页面,单击“新增访问密钥”。 在弹出的“新增访问密钥”对话框中,输入登录密码和对应验证码。 用户如果未绑定邮箱和手机,则只需输入登录密码。 用户如果同时绑定了邮箱和手机,可以选择其中一种方式进行验证。 单击“确定”。 在弹出的“下载确认”提示框中,单击“确定”后,密钥会直接保存到浏览器默认的下载文件夹中。 打开下载下来的“credentials.csv”文件即可获取到访问密钥(AK和SK)。 每个用户最多可创建两个有效的访问密钥。 为防止访问密钥泄露,建议您将其保存到安全的位置。如果用户在此提示框中单击“取消”,则不会下载密钥,后续也将无法重新下载。如果需要使用访问密钥,可以重新创建新的访问密钥。 父主题: 快速入门
  • 下载归档存储对象 开发过程中,您有任何问题可以在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,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 当下载大对象到本地时,经常出现因网络不稳定或程序崩溃导致下载失败的情况。失败后再次重新下载不仅浪费资源,而且当网络不稳定时仍然有下载失败的风险。断点续传下载接口能有效地解决此类问题引起的下载失败,其原理是将待下载的对象分成若干个分段分别下载,并实时地将每段下载结果统一记录在checkpoint文件中,仅当所有分段都下载成功时返回下载成功的结果,否则抛出异常提醒用户再次调用接口进行重新下载(重新下载时因为有checkpoint文件记录当前的下载进度,避免重新下载所有分段,从而节省资源提高效率)。 您可以通过ObsClient.downloadFile进行断点续传下载。该接口可设置的参数如下: 参数 作用 OBS Android SDK对应方法 bucketName 桶名,必选参数。 DownloadFileRequest.setBucketName objectKey 对象名,必选参数。 DownloadFileRequest.setObjectKey downloadFile 下载对象的本地文件全路径。当该值为空时,默认为当前程序的运行目录。 DownloadFileRequest.setDownloadFile partSize 分段大小,单位字节,取值范围是100KB~5GB,默认为5MB。 DownloadFileRequest.setPartSize taskNum 分段下载时的最大并发数,默认为1。 DownloadFileRequest.setTaskNum isEncodeHeaders 是否自动解码响应头 DownloadFileRequest.setIsEncodeHeaders enableCheckpoint 是否开启断点续传模式,默认为false,表示不开启。 DownloadFileRequest.setEnableCheckpoint checkpointFile 记录下载进度的文件,只在断点续传模式下有效。当该值为空时,默认与下载对象的本地文件路径同目录。 DownloadFileRequest.setCheckpointFile versionId 对象的版本号。 DownloadFileRequest.setVersionId ifModifiedSince 如果对象在指定的时间后有修改,则返回对象内容,否则返回错误。 DownloadFileRequest.setIfModifiedSince ifUnmodifiedSince 如果对象在指定的时间后没有修改,则返回对象内容,否则返回错误。 DownloadFileRequest.setIfUnmodifiedSince ifMatchTag 如果对象的ETag值与该参数值相同,则返回对象内容,否则抛出异常。 DownloadFileRequest.setIfMatchTag ifNoneMatchTag 如果对象的ETag值与该参数值不相同,则返回对象内容,否则抛出异常。 DownloadFileRequest.setIfNoneMatchTag progressListener 设置数据传输监听器,用于获取下载进度。 DownloadFileRequest.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); DownloadFileRequest request = new DownloadFileRequest("bucketname", "objectname"); // 设置下载对象的本地文件路径 request.setDownloadFile("localfile"); // 设置分段下载时的最大并发数 request.setTaskNum(5); // 设置分段大小为10MB request.setPartSize(10 * 1024 * 1024); // 开启断点续传模式 request.setEnableCheckpoint(true); try{ // 进行断点续传下载 DownloadFileResult result = obsClient.downloadFile(request); }catch (ObsException e) { // 发生异常时可再次调用断点续传下载接口进行重新下载 } 断点续传下载接口是利用范围下载特性实现的,是对范围下载的封装和加强。 断点续传下载接口不仅能在失败重下时节省资源提高效率,还因其对分段进行并发下载的机制能加快下载速度,帮助用户快速完成下载业务;且其对用户透明,用户不用关心checkpoint文件的创建和删除、分段任务的切分、并发下载的实现等内部细节。 enableCheckpoint参数默认是false,代表不启用断点续传模式,此时断点续传下载接口退化成对范围下载的简单封装,不会产生checkpoint文件。 checkpointFile参数仅在enableCheckpoint参数为true时有效。 由于 HTTP 编码规范限制,无法发送非 ASCII 码字符,SDK 会在接收响应时使用 url 解码规则解码响应头中的信息,。如您的元数据存储的 content-disposition 为“attachment; filename="%E4%B8%AD%E6%96%87.txt"”,则 SDK 获取结果为“attachment; filename="中文.txt"”。 如果不需要 SDK 帮您解码,可以调用 DownloadFileRequest.setIsEncodeHeaders(false) 关闭自动解码。 父主题: 下载对象
  • 混淆配置 #okhttp -dontwarn okhttp3.** -keep class okhttp3.**{*;} #okio -dontwarn okio.** -keep class okio.**{*;} #sdk -keep class com.obs.services.** {*;} -keep class com.obs.log.** {*;} #java-xmlbuilder -keep class com.jamesmurty.utils.**{*;}
  • 兼容性 版本修订记录信息:ChangeLog。 推荐使用的Android系统版本:Android 7.0,8.0,8.1,9.0,10.0版本(HTTP/HTTPS协议)。 jdk1.8环境建议使用3.21.12版本的OBS Android SDK。 命名空间:与旧版本(2.1.x)保持兼容,对外的接口都包含在com.obs.services,com.obs.services.model和com.obs.services.exception三个包中。 接口函数:与旧版本(2.1.x)保持兼容。 Android 4.4及以下版本只能使用配置HTTP协议访问OBS服务。
共100000条