全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
对象存储 OSS

快速入门

更新时间:2017-09-15 16:48:21

以下演示了上传、下载文件的基本流程。更多细节用法可以参考本工程的:

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(); // 如果需要等待任务完成
本文导读目录