开发者社区> 问答> 正文

Android-SDK之如何实现快速入门?

以下演示了上传、下载文件的基本流程。更多细节用法可以参考本工程的:
test目录: 点击查看
或者:
sample目录: 点击查看

STEP-1. 初始化OSSClient


初始化主要完成Endpoint设置、鉴权方式设置、Client参数设置。其中,鉴权方式包含自签名模式、STS鉴权模式。如果要使用STS鉴权请先阅读访问控制章节了解RAM的基础知识。以下内容假设您已开通RAM服务并了解RAM相关内容。了解如何获取子账户AccessKeyId,SecretKeyId以及RoleArn信息。
完善 脚本文件中AccessKeyId,SecretKeyId以及RoleArn参数信息。通过python可以启动一个本机http服务。在客户端代码中访问本地服务从而获得StsToken.AccessKeyId,StsToken.SecretKeyId以及StsToken.SecurityToken。
更多信息可查看sample 中sts 使用方式 点击查看

  1. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  2. // 在移动端建议使用STS方式初始化OSSClient。
  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. //开启可以在控制台看到日志,并且会支持写入手机sd卡中的一份日志文件位置在SDCard_path\OSSLog\logs.csv  默认不开启
  12. //日志会记录oss操作行为中的请求数据,返回数据,异常信息
  13. //例如requestId,response header等
  14. //android_version:5.1  android版本
  15. //mobile_model:XT1085  android手机型号
  16. //network_state:connected  网络状况
  17. //network_type:WIFI 网络连接类型
  18. //具体的操作行为信息:
  19. //[2017-09-05 16:54:52] - Encounter local execpiton: //java.lang.IllegalArgumentException: The bucket name is invalid.
  20. //A bucket name must:
  21. //1) be comprised of lower-case characters, numbers or dash(-);
  22. //2) start with lower case or numbers;
  23. //3) be between 3-63 characters long.
  24. //------>end of log
  25. OSSLog.enableLog();
  26. OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);

通过OSSClient发起上传、下载请求是线程安全的,您可以并发执行多个任务。

STEP-2. 上传文件


这里假设您已经在控制台上拥有自己的Bucket,这里演示如何从把一个本地文件上传到OSS:
  1. // 构造上传请求
  2. PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectKey>", "<uploadFilePath>");
  3. // 异步上传时可以设置进度回调
  4. put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
  5.     @Override
  6.     public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
  7.         Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
  8.     }
  9. });
  10. OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
  11.     @Override
  12.     public void onSuccess(PutObjectRequest request, PutObjectResult result) {
  13.         Log.d("PutObject", "UploadSuccess");
  14.     }
  15.     @Override
  16.     public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  17.         // 请求异常
  18.         if (clientExcepion != null) {
  19.             // 本地异常如网络异常等
  20.             clientExcepion.printStackTrace();
  21.         }
  22.         if (serviceException != null) {
  23.             // 服务异常
  24.             Log.e("ErrorCode", serviceException.getErrorCode());
  25.             Log.e("RequestId", serviceException.getRequestId());
  26.             Log.e("HostId", serviceException.getHostId());
  27.             Log.e("RawMessage", serviceException.getRawMessage());
  28.         }
  29.     }
  30. });
  31. // task.cancel(); // 可以取消任务
  32. // task.waitUntilFinished(); // 可以等待直到任务完成


STEP-3. 下载指定文件


下载一个指定object,返回数据的输入流,需要自行处理:
  1. // 构造下载文件请求
  2. GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");
  3. OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
  4.     @Override
  5.     public void onSuccess(GetObjectRequest request, GetObjectResult result) {
  6.         // 请求成功
  7.         Log.d("Content-Length", "" + getResult.getContentLength());
  8.         InputStream inputStream = result.getObjectContent();
  9.         byte[] buffer = new byte[2048];
  10.         int len;
  11.         try {
  12.             while ((len = inputStream.read(buffer)) != -1) {
  13.                 // 处理下载的数据
  14.             }
  15.         } catch (IOException e) {
  16.             e.printStackTrace();
  17.         }
  18.     }
  19.     @Override
  20.     public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  21.         // 请求异常
  22.         if (clientExcepion != null) {
  23.             // 本地异常如网络异常等
  24.             clientExcepion.printStackTrace();
  25.         }
  26.         if (serviceException != null) {
  27.             // 服务异常
  28.             Log.e("ErrorCode", serviceException.getErrorCode());
  29.             Log.e("RequestId", serviceException.getRequestId());
  30.             Log.e("HostId", serviceException.getHostId());
  31.             Log.e("RawMessage", serviceException.getRawMessage());
  32.         }
  33.     }
  34. });
  35. // task.cancel(); // 可以取消任务
  36. // task.waitUntilFinished(); // 如果需要等待任务完成

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

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android内存泄漏自动化链路分析组件Probe 立即下载
一个跨平台的云服务SDK需要什么 立即下载