本文主要講解OssDemo這樣的移動APP如何使用應用伺服器,以達到不需要在APP端儲存AccessKeyId和AccessKeySecret也能向OSS上傳的目的。

調用邏輯

  1. OssDemo在獲取sts_server的地址後,發送請求。
  2. sts_server返回AccessKeyId、AccessKeySecret、SecurityToken、Expiration。
  3. OssDemo獲取這些資訊後,調用SDK,構建OssClient。

具體代碼

  1. 生成一個EditText控制項。
    位置:
     res/layout/content_main.xml
     內容:
     <EditText
         android:layout_height="wrap_content"
         android:layout_width="0dp"
         android:layout_weight="4"
         android:id="@+id/sts_server"
         android:text="@string/sts_server"
         />
     位置:
     res/values/strings
     內容:
     <string name="sts_server">http://oss-demo.aliyuncs.com/app-server/sts.php</string>
  2. 從應用伺服器獲取STS相關參數的代碼。

    函數實現:

    OSSFederationToken getFederationToken()
  3. 調用STS返回參數,初始化OssClient代碼。

    函數實現:

    //初始化一個OssService用來上傳下載
     public OssService initOSS(String endpoint, String bucket, ImageDisplayer displayer) {
         //如果希望直接使用accessKey來訪問的時候,可以直接使用OSSPlainTextAKSKCredentialProvider來鑒權。
         //OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(accessKeyId, accessKeySecret);
         //使用自己的獲取STSToken的類
         OSSCredentialProvider credentialProvider = new STSGetter(stsServer);
         ClientConfiguration conf = new ClientConfiguration();
         conf.setConnectionTimeout(15 * 1000); // 連接逾時,預設15秒
         conf.setSocketTimeout(15 * 1000); // socket逾時,預設15秒
         conf.setMaxConcurrentRequest(5); // 最大並發請求書,預設5個
         conf.setMaxErrorRetry(2); // 失敗後最大重試次數,預設2次
         OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf);
         return new OssService(oss, bucket, displayer);
     }