本文主要講解OssDemo這樣的移動APP如何使用應用伺服器,以達到不需要在APP端儲存AccessKeyId和AccessKeySecret也能向OSS上傳的目的。
調用邏輯
- OssDemo在擷取sts_server的地址後,發送請求。
- sts_server返回AccessKeyId、AccessKeySecret、SecurityToken、Expiration。
- OssDemo擷取這些資訊後,調用SDK,構建OssClient。
具體代碼
- 產生一個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>
- 從應用伺服器擷取STS相關參數的代碼。
函數實現:
OSSFederationToken getFederationToken()
- 調用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); }