このトピックでは、アプリにAccessKey IDとAccessKeyシークレットを保存する必要がない場合に、OssDemoなどのモバイルアプリを使用して既存のアプリサーバーを介して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); // ソケットのタイムアウト時間 (秒) 。 デフォルト値 :15 conf.setMaxConcurrentRequest(5); // 最大同時リクエスト。 デフォルト値:5 conf.setMaxErrorRetry(2); // 失敗後の最大再試行。 デフォルト値: 2 OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf); return new OssService(oss, bucket, displayer); }