开发者社区> 问答> 正文

Android-SDK之如何实现初始化?

OSSClient 是 OSS 服务的 Android 客户端,它为调用者提供了一系列的方法,可以用来操作,管理存储空间(bucket)和文件(object)等。在使用 SDK 发起对 OSS 的请求前,您需要初始化一个 OSSClient 实例,并对它进行一些必要设置。

确定 Endpoint


Endpoint 是阿里云 OSS 服务在各个区域的地址,目前支持以下两种形式:

Endpoint类型解释
OSS区域地址使用OSS Bucket所在区域地址,各个区域Endpoint参考这里
用户自定义域名用户自定义域名,且CNAME指向OSS域名

关于Endpoint,可以参考: 点击查看

OSS区域地址


使用OSS Bucket所在区域地址,Endpoint查询可以有下面两种方式:
  • 查询Endpoint与区域对应关系详情,可以参考:点击查看
  • 您可以登录 阿里云OSS控制台,进入Bucket概览页,Bucket域名的后缀部分:如bucket-1.oss-cn-hangzhou.aliyuncs.com的oss-cn-hangzhou.aliyuncs.com部分为该Bucket的外网Endpoint。


Cname


您可以将自己拥有的域名通过Cname绑定到某个存储空间(bucket)上,然后通过自己域名访问存储空间内的文件。
比如您要将域名new-image.xxxxx.com绑定到深圳区域的名称为image的存储空间上:您需要到您的域名xxxxx.com托管商那里设定一个新的域名解析,将 http://new-image.xxxxx.com 解析到 http://image.oss-cn-shenzhen.aliyuncs.com ,类型为CNAME。

设置EndPoint和凭证


移动终端是一个不受信任的环境,把AccessKeyId和AccessKeySecret直接保存在终端用来加签请求,存在极高的风险。推荐使用STS鉴权模式或自签名模式,详细请参考: 访问控制移动端直传
如果要使用STS鉴权请先阅读访问控制章节了解RAM的基础知识。以下内容假设您已开通RAM服务并了解RAM相关内容。了解如何获取子账户AccessKeyId,SecretKeyId以及RoleArn信息。
完善 脚本文件中AccessKeyId,SecretKeyId以及RoleArn参数信息。通过python可以启动一个本机http服务。在客户端代码中访问本地服务从而获得StsToken.AccessKeyId,StsToken.SecretKeyId以及StsToken.SecurityToken。
更多信息可查看可查看sample 中 sts 使用方式 点击查看
设置EndPoint和CredentialProvider示例如下:
  1. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  2. // 明文设置secret的方式建议只在测试时使用,更多鉴权模式请参考访问控制章节
  3. // 也可查看sample 中 sts 使用方式了解更多(https://github.com/aliyun/aliyun-oss-android-sdk/tree/master/app/src/main/java/com/alibaba/sdk/android/oss/app)
  4. OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>");
  5. //该配置类如果不设置,会有默认配置,具体可看该类
  6. ClientConfiguration conf = new ClientConfiguration();
  7. conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
  8. conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
  9. conf.setMaxConcurrentRequest(5); // 最大并发请求数,默认5个
  10. conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
  11. //通过调用OSSLog.enableLog()开启可以在控制台看到日志,
  12. //并且会支持写入手机sd卡中的一份日志文件位置在SDCard_path\OSSLog\logs.csv  默认不开启
  13. //日志会记录oss操作行为中的请求数据,返回数据,异常信息
  14. //例如requestId,response header等,下边是一个日志记录case
  15. //android_version:5.1  android版本
  16. //mobile_model:XT1085  android手机型号
  17. //network_state:connected  网络状况
  18. //network_type:WIFI 网络连接类型
  19. //具体的操作行为信息:
  20. //[2017-09-05 16:54:52] - Encounter local execpiton: //java.lang.IllegalArgumentException: The bucket name is invalid.
  21. //A bucket name must:
  22. //1) be comprised of lower-case characters, numbers or dash(-);
  23. //2) start with lower case or numbers;
  24. //3) be between 3-63 characters long.
  25. //------>end of log
  26. OSSLog.enableLog();
  27. OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);

提示:


设置EndPoint为cname


如果您已经在bucket上绑定cname,将该cname直接设置到endPoint即可。如:
  1. String endpoint = "http://new-image.xxxxx.com";
  2. ...
  3. OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);

更多鉴权方式参考: 访问控制

设置网络参数


也可以在初始化的时候设置详细的ClientConfiguration:
  1. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  2. // 在移动端建议使用STS的方式初始化OSSClient,更多信息参考:[访问控制]
  3. OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>");
  4. ClientConfiguration conf = new ClientConfiguration();
  5. conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
  6. conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
  7. conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
  8. conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
  9. OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf);

展开
收起
青衫无名 2017-10-18 11:48:49 2550 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载