本文介绍如何快速入门。

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

sample目录(包含上传本地文件,下载文件,断点续传,设置callback回调等示例)。点击查看

也可以直接git clone 工程。通过配置必要的参数:



然后运行工程,demo 如下:



  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 使用方式点击查看

    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    
    // 在移动端建议使用STS方式初始化OSSClient。
    // 更多信息可查看sample 中 sts 使用方式(https://github.com/aliyun/aliyun-oss-android-sdk/tree/master/app/src/main/java/com/alibaba/sdk/android/oss/app)
    OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>");
    
    //该配置类如果不设置,会有默认配置,具体可看该类
    ClientConfiguration conf = new ClientConfiguration();
    conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
    conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
    conf.setMaxConcurrentRequest(5); // 最大并发请求数,默认5个
    conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
    
    //开启可以在控制台看到日志,并且会支持写入手机sd卡中的一份日志文件位置在SDCard_path\OSSLog\logs.csv  默认不开启
    //日志会记录oss操作行为中的请求数据,返回数据,异常信息
    //例如requestId,response header等
    //android_version:5.1  android版本
    //mobile_model:XT1085  android手机型号
    //network_state:connected  网络状况
    //network_type:WIFI 网络连接类型
    //具体的操作行为信息:
    //[2017-09-05 16:54:52] - Encounter local execpiton: //java.lang.IllegalArgumentException: The bucket name is invalid. 
    //A bucket name must: 
    //1) be comprised of lower-case characters, numbers or dash(-); 
    //2) start with lower case or numbers; 
    //3) be between 3-63 characters long. 
    //------>end of log
    OSSLog.enableLog();
    
    OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
    

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

  2. 上传文件

    这里假设您已经在控制台上拥有自己的Bucket,这里演示如何从把一个本地文件上传到OSS:

    // 构造上传请求
    PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectKey>", "<uploadFilePath>");
    
    // 异步上传时可以设置进度回调
    put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
      @Override
      public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
        Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
      }
    });
    
    OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
      @Override
      public void onSuccess(PutObjectRequest request, PutObjectResult result) {
        Log.d("PutObject", "UploadSuccess");
      }
    
      @Override
      public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // 请求异常
        if (clientExcepion != null) {
          // 本地异常如网络异常等
          clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
          // 服务异常
          Log.e("ErrorCode", serviceException.getErrorCode());
          Log.e("RequestId", serviceException.getRequestId());
          Log.e("HostId", serviceException.getHostId());
          Log.e("RawMessage", serviceException.getRawMessage());
        }
      }
    });
    
    // task.cancel(); // 可以取消任务
    
    // task.waitUntilFinished(); // 可以等待直到任务完成
    
  3. 下载指定文件

    下载一个指定object,返回数据的输入流,需要自行处理:

    // 构造下载文件请求
    GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");
    
    OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
      @Override
      public void onSuccess(GetObjectRequest request, GetObjectResult result) {
        // 请求成功
        Log.d("Content-Length", "" + getResult.getContentLength());
    
        InputStream inputStream = result.getObjectContent();
    
        byte[] buffer = new byte[2048];
        int len;
    
        try {
          while ((len = inputStream.read(buffer)) != -1) {
            // 处理下载的数据
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    
      @Override
      public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // 请求异常
        if (clientExcepion != null) {
          // 本地异常如网络异常等
          clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
          // 服务异常
          Log.e("ErrorCode", serviceException.getErrorCode());
          Log.e("RequestId", serviceException.getRequestId());
          Log.e("HostId", serviceException.getHostId());
          Log.e("RawMessage", serviceException.getRawMessage());
        }
      }
    });
    
    // task.cancel(); // 可以取消任务
    
    // task.waitUntilFinished(); // 如果需要等待任务完成