背景

以下では、OSS サービスと MPS の SDK アップロードに基づき、オーディオとビデオのファイルアップロードサービスを、すばやく構築する方法について説明します。

利点

MPS の SDK を使用したオーディオおよびビデオファイルのアップロードには、次のような利点があります。
  • ファイルリスト管理の追加

  • STS トークンタイムアウト更新機能の追加

  • アップロード中、ネットワークジッターが発生した場合の自動リトライ機能

  • ファイルの再開ブレークポイント機能

  • MPS サービスを自動的にトリガーするワークフロー

  • メディアのタイトル、タグ、説明、カテゴリ、カバー URL などの設定

    • HTTP 再開の制限事項: 複数のライフサイクル間での再開は許可されていません。 JS のサイドページは更新、閉じることができません。また、Android / iOS は アプリと携帯電話を閉じることができません。
    • 同じローカルファイルは、一度だけアップロードすることができます。

サーバーの作成

モバイル AK のセキュリティ問題を考慮し、ファイルのアップロードに STS を選択します。 STS を使用するとアップロードのセキュリティがどのように向上するかについては、 「RAM and STS User Guide」をご参照ください。

STS 有効化の手順

  1. OSS サービスを有効化し、バケットを作成して、OSS コンソールにログインします。
  2. OSS 概要ページで基本設定エリアを見つけ、[セキュリティトークン] をクリックします。

  3. [セキュリティトークンのショートカット設定] ページに移動します。

  4. 自動的に認証が行われ、テキストボックスにパラメーターが保存されます。 [AK 情報を保存]をクリックし、ダイアログを閉じ、STS の有効化を完了します。


アプリケーションサーバーの構築

アプリサーバーのサンプルコードの設定

本ページでは、3 つの言語でダウンロードできる、3 つの開発プログラム例を提供します。
各言語パックのダウンロードでは、構成ファイル config.json が含まれています。

{
"AccessKeyID" : "",
"AccessKeySecret" : "",
"RoleArn" : "",
"TokenExpireTime" : "900",
"PolicyFile": "policy/all_policy.txt"
}
  • AccessKeyID: 上図で 1 とマークされているパラメーター値を設定します。

  • AccessKeySecret: 上図で 2 とマークされているパラメーター値を設定します。

  • RoleArn: 上図で 3 とマークされているパラメーター値を設定します。

  • TokenExpireTime: Android / iOS アプリによって取得されたトークンの有効期限を示します。 注記: 最小値は 900 秒です。 既定値のままにすることができます。

  • PolicyFile: トークンファイルへのアクセス権のリストを入力します。既定値は変更できません。

ここでは、ポリシーディレクトリで最も一般的な権限を定義する、3 つのトークンファイルを提供しています。 詳細は、下記のとおりです。
  • all_policy.txt: トークンが、バケットの作成または削除、ファイルのアップロードまたはダウンロード、およびこのアカウント下のファイルの削除を行う権限を持つことを指定します。

  • all_policy.txt: このアカウント下で指定されたバケットへの読み取りアクセス権をトークンが持つことを指定します。

  • bucket_read_write_policy.txt: このアカウントを対象として、指定されたバケットに対する、読み取りおよび書き込み権限を付与するトークンを指定します。

指定したバケットに対する、読み取りおよび書き込み権限を付与するためのトークンを作成する場合、"bucket_read_policy.txt" ファイルおよび "bucket_read_write_policy.txt" ファイルの $ BUCKET_NAME を目的のバケットの名前に置き換えます。

  • フォーマットの解像度を返す
    
    {
    "status":200,
    "AccessKeyId":"STS. 3pYjsdgdgagdasdg",
    "AccessKeySecret":"rpnwO9kvEgetGdrddgsR2YrTtI",
    "Security":"CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVtbzI=",
    "Expiration":"2015-12-12T07:49:09Z",
    }
    注記 (以下に示す 4 つの変数はトークンを構成します)。
    • status は、アプリがトークンを取得する結果を示します。 アプリは、トークンを正常に取得したことを示すステータスコード "200" を返します。

    • AccessKeyId は、OSS クライアントの初期化時に Android / iOS アプリが取得する AccessKeyId を示します。

    • AccessKeySecret は、OSS クライアントの初期化時に Android / iOS アプリが取得する AccessKeySecret を示します。

    • SecurityToken は、Android / iOS アプリが初期化するトークンを示します。

    • Expiration は、トークンの有効期限が切れる時刻を示します。 Android SDK では、自動的にトークンの有効性を判断し、必要に応じて新しいトークンを取得します。

  • コードの実行方法の例
    • JAVA (Java 1.7 ベース) では、パックをダウンロードして解凍した後、以下のコマンドを実行します。: java -jar oss-token-server.jar (port)

      ポートを指定せずに java –jar oss-token-server.jar を実行すると、プログラムはポート 7080 をリスニングします。 リスンポートを 9000 に変更するには、java –jar app-token-server.jar 9000 を実行します。 必要に応じて、ポート番号を指定します。

    • PHP では、パッケージをダウンロードして展開した後、config.json ファイルを修正し、直接、php sts.php を実行してトークンを生成します。 その後、指定されたアドレスにアプリサーバーを設定します。

MPS クライアント SDK の使用

  • クライアントのサンプルコード
    ここでは、3 つの言語でダウンロードできる、3 つの開発プログラム例を提供します。
  • SDK のコアコード

    JS 側

    JS SDK を使用する前に、まず、ビデオをアップロードする OSS バケットに向けた CORS Access を開きます。 JS デモをダウンロードしてブラウザで開きます。ページ設定の各パラメーターは次のとおりです。
    • 上記で設定したアプリケーションサーバーアドレスとして、"HTTP アドレス" を設定(例: http://127.0.0.1:7080/)
    • ユーザバケットの設定
    • バケットエンドポイントの設定
    • クリックしてファイルを選択し、アップロードするファイルを選択
    • アップロード開始ボタンのクリック
    
    // Initialize the client
    var uploader = new VODUpload({
    // Start upload
    'onUploadstarted': function (uploadInfo) {;},
    //File uploaded successfully
    'onUploadSucceed': function (uploadInfo) {console.log("Uploaded successfully");},
    //File upload failed
    'onUploadFailed': function (uploadInfo, code, message) {console.log("File upload failed");},
    // File upload progress, in bytes
    'onUploadProgress': function (uploadInfo, totalSize, uploadedSize) {console.log("File upload progress,");},
    //Security token timed out
    'onUploadTokenExpired': function (uploadInfo) {console.log("Token timeout");}
    });
    // Get STS Information
    result = httpGet(httpServer);
    stsToken = JSON.parse(result);
    uploader.init(stsToken.AccessKeyId, stsToken.AccessKeySecret, stsToken.SecurityToken, stsToken.Expiration);
    // Add File
    uploader.addFile(event.target.files[i], endpoint, bucket, object, userData);
    // Start uploading
    uploader.startUpload();

    アンドロイド側

    Android に次の権限が追加されていることを確認します。
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    Android Demo をダウンロードし、以下の変更を加えます。
    • http://192.168.0.2:7080/ など、アプリケーションサーバー設定アドレス用に、 [serverUrl] 内の [MainActivity] を変更します。
    • ユーザーのバケットを設定します。
    • ユーザーのバケットに対応するエンドポイントを設定します。
    • デモを実行し、[ファイルの追加] をクリックします。
    • [アップロード] をクリックして、ファイルが OSS バケットの uploadtest / ディレクトリ下に正常にアップロードされたかどうかを確認します。
    メインコード:
    
    VODUploadClient uploader = new VODUploadClientImpl(getApplicationContext());
    VODUploadCallback callback = new VODUploadCallback() {
    @Override
    public void onUploadSucceed(UploadFileInfo info) {;}
    @Override
    public void onUploadFailed(UploadFileInfo info, String code, String message) {;}
    @Override
    public void onUploadProgress(UploadFileInfo info, long uploadedSize, long totalSize) {;}
    @Override
    public void onUploadTokenExpired(UploadFileInfo info) {
    // Get and update STS token.
    uploader.resumeWithToken("", "", "", "");
    }
    @Override
    public void onUploadRetry(UploadFileInfo info, String code, String message) {;}
    @Override
    public void onUploadRetryResume(UploadFileInfo info) {;}
    @Override
    public boolean onUploadStarted(UploadFileInfo uploadFileInfo) {;}
    };
    // Get STS token and initialize
    uploader.init("", "", "", "", callback);
    // Add File
    uploader.addFile("", "", "", "");
    // Start uploading
    uploader.start();

    IOS 側

    iOS のデモをダウンロードし、以下の変更を加えます。
    • [VODUploadDemo.m] 内の [serverUrl] を変更し、アプリケーションサーバー用のアドレス http://192.168.0.2:7080/ を設定します。
    • ユーザーバケットを設定します。
    • ユーザーのバケットに対応するエンドポイントを設定します。
    • デモを実行し、[ファイルの追加] をクリックします。
    • [アップロード] をクリックして、ファイルが OSS バケットの uploadtest / ディレクトリ下に正常にアップロードされたかどうかを確認します。
    メインコード:
    
    // Callback Initialization
    OnUploadStartedListener testUploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {;};
    OnUploadSucceedListener testSuccessCallbackFunc = ^(NSString* filePath){;};
    OnUploadFailedListener testFailedCallbackFunc = ^(NSString* filePath, NSString* code, NSString* message){;};
    OnUploadProgressListener testProgressCallbackFunc = ^(NSString* filePath, long uploadedSize, long totalSize) {;};
    OnUploadTokenExpiredListener testTokenExpiredCallbackFunc = ^{
    // Get and update STS token
    [uploader resumeWithToken:
    accessKeySecret:
    secretToken:
    expireTime:]
    };
    OnUploadRertyListener testUploadRertyListener = ^{;};
    OnUploadRertyResumeListener testUploadRertyResumeListener = ^{;};
    VODUploadListener *listener;
    listener = [[VODUploadListener alloc] init];
    listener.started = testUploadStartedCallbackFunc;
    listener.success = testSuccessCallbackFunc;
    listener.failure = testFailedCallbackFunc;
    listener.progress = testProgressCallbackFunc;
    listener.expire = testTokenExpiredCallbackFunc;
    listener.retry = testUploadRertyListener;
    listener.retryResume = testUploadRertyResumeListener;
    // Get Token
    // Upload client Initialization
    VODUploadClient *uploader;
    [uploader init:
    accessKeySecret:
    secretToken:
    expireTime:
    listener:listener];
    // Add File
    [uploader addFile:
    endpoint:
    bucket:
    object:];
    // Start uploading
    [uploader start];