すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:モバイルアプリのアップロードコールバックを設定する

最終更新日:Dec 20, 2023

このトピックでは、Object Storage service (OSS) に基づいてモバイルアプリの直接データ転送サービスを設定し、アップロードコールバックを設定する方法について説明します。

背景情報

モバイルアプリの直接データ転送の設定では、モバイルアプリのOSSベースの直接データ転送サービスを設定する方法について説明します。 OSSベースの直接転送サービスがAndroidまたはiOSアプリに設定された後、アプリユーザーがアップロード要求を送信すると、セキュリティトークンサービス (STS) トークンがアプリユーザーに発行されます。 アプリユーザーは、STSトークンを使用して、トークンが無効になるまで複数回OSSにデータをアップロードできます。 その結果、アプリサーバーは、アプリユーザーがアップロードしたデータを特定できず、アプリ開発者のデータ管理が複雑になります。 この問題に対処するために、OSSはアップロードコールバック機能を提供します。

手順

次の図は、アップロードコールバックの仕組みを示しています。

image

OSSがAndroidまたはiOSアプリから送信されたアップロードリクエストを受信すると (ステップ5) 、OSSはアップロードコールバックタスクをトリガーし (ステップ6) 、コールバックリクエストをアプリサーバーに送信します。 次に、アプリサーバーはOSSに応答を返し、OSSはその応答に基づいてアップロード結果をAndroidまたはiOSアプリに送信します (ステップ7) 。 詳細については、「コールバック」をご参照ください。

目的

  • アップロードコールバックを使用して、アップロードされたオブジェクトに関する基本情報をアプリサーバーに送信できます。

    次の表に、返される基本情報に含めることができる変数を示します。 返されるコンテンツの形式は、AndroidまたはiOSアプリを使用してオブジェクトをアップロードするときに指定されます。

    システム変数

    説明

    バケット

    モバイルアプリを使用してオブジェクトがアップロードされるバケット。

    object

    モバイルアプリを使用してオブジェクトをOSSにアップロードした後のオブジェクトの名前。

    etag

    アップロードされたオブジェクトのETag。これは、モバイルアプリのユーザーに返されるアップロード結果に含まれるETagフィールドです。

    size

    アップロードされたオブジェクトのサイズ。

    mimeType

    アップロードされたデータのタイプ。

    imageInfo.height

    アップロードされた画像の高さ。

    imageInfo.width

    アップロードされた画像の幅。

    imageInfo.format

    アップロードされた画像の形式。 例: JPGとPNG。

  • アップロードコールバックを使用して、アプリサーバーのカスタムコールバックパラメーターを指定し、アプリクライアントに関する情報を取得できます。

    たとえば、アプリ開発者であり、アプリのバージョン、オペレーティングシステムのバージョン、GPS座標、携帯電話のモデルに関する情報を取得したいとします。 この場合、AndroidまたはiOSアプリを使用してオブジェクトをアップロードするときに、アプリに次のカスタムパラメーターを指定できます。

    • x:version: アプリのバージョン

    • x:system: オペレーティングシステムのバージョン

    • x:gps: GPS座標

    • x:phone: 携帯电话モデル

    上記のパラメーターを設定した後、これらのパラメーターは、AndroidまたはiOSアプリクライアントがオブジェクトをOSSにアップロードするときに実行されます。 次に、OSSはこれらのパラメーターをcallbackBodyに含め、callbackBodyをアプリサーバーに送信します。 このようにして、アプリサーバーはアプリクライアントに関する情報を受け取ります。

アップロードコールバックのアプリサーバーの要件

  • POSTリクエストを受信するサービスがデプロイされます。 このサービスにはパブリックIPアドレスが必要です。 例: http://example.com/callback.php

  • このサービスはOSSに正しく応答する必要があり、応答はJSON形式である必要があります。 カスタムレスポンスを指定できます。 OSSは、アプリサーバーからAndroidまたはiOSアプリに応答を返します。 詳細については、「コールバック」をご参照ください。

モバイルアプリ側でのアップロードコールバック要求の設定

OSSがアップロードリクエストを受信したときにアップロードコールバックをトリガーするには、モバイルアプリでアップロードリクエストを作成して、次のコンテンツをアップロードリクエストに含める必要があります。

  • callbackUrl: コールバックリクエストの送信先のアプリサーバーのURL (http://example.com/callback.phpなど) 。 このURLはインターネット経由でアクセスできる必要があります。

  • callbackBody: 前述のシステム変数OSSがアプリサーバーに戻ります。 callbackBodyで返される1つ以上の変数を指定できます。

たとえば、あなたはアプリ開発者であり、アプリサーバーのURLはhttp://example.com/callback.phpです。 オブジェクト名とサイズを取得し、携帯電話モデルとしてx:phoneを、オペレーティングシステムのバージョンとしてx:systemを指定します。

次のセクションでは、アップロードコールバックの2種類のリクエストについて説明します。

  • iOSアプリでのアップロードコールバック要求の例:

    OSSPutObjectRequest * request = [OSSPutObjectRequest new];
    request.bucketName = @ "<bucketName>";
    request.objectKey = @ "<objectKey>";
    request.uploadingFileURL = [NSURL fileURLWithPath:@ "<filepath>"];
    // コールバックパラメーターを設定します。
    request.callbackParam = @{
                              @ "callbackUrl": @ "http://example.com/callback.php" 、
                              @ "callbackBody": @ "filename =${ object}&size =${ size}&phone =${ x:phone}&system =${ x:system}"
                              };
    // 変数を指定します。
    request.callbackVar = @{
                            @ "x:phone": @ "iphone6s" 、
                            @"x:system": @"ios9.1"
                            };
  • Androidアプリでのアップロードコールバック要求の例:

    PutObjectRequest put = new PutObjectRequest(testBucket、testObject、uploadFilePath);
    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setContentType("application/octet-stream");
    put.setMetadata (メタデータ);
    put.setCallbackParam(new HashMap<String, String>() {
        {
            put("callbackUrl" 、"http://example.com/callback.php");
            put("callbackBody", "filename =${ object}&size =${ size}&phone =${ x:phone}&system =${ x:system}");
        }
    });
    put.setCallbackVars(new HashMap<String, String>() {
         {
             置く ("x: 電話" 、"iPhone 6s");
             put("x:system", "YunOS5.0");
         }
    });

アプリサーバーが受信したアップロードコールバック要求のサンプル

アプリサーバーが受信するアップロードコールバック要求は、上記のcallbackUrlおよびcallbackBodyの設定によって異なります。 例:

POST /index.html HTTP/1.0
ホスト: 203.0.113.0
接続: 閉じる
コンテンツ-長さ: 81
コンテンツタイプ: application/x-www-form-urlencoded
ユーザーエージェント: http-client/0.0.1
承認: kKQeGTRccDKyHB3H9vF + xYMSrmhMZjzzl2/kdD1ktNVgbWE **** G0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA=
x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNv **** YWxsYmFja19wdWJfa2V5X3YxLnBlbQ==
filename=test.txt&size=5&phone=iphone6s&system=ios9.1 

詳細については、「コールバック」をご参照ください。

アプリサーバーは、アップロードコールバック要求がOSSから送信されるかどうかを判断します

アプリサーバーが攻撃されて無効なリクエストを受信した場合、アプリサーバーはコールバックリクエストがOSSから送信されたかどうかを判断する必要があります。

コールバック要求がOSSから送信されたかどうかを判断するために、アプリサーバーは、ossから送信されたx-OSS-pub-key-urlおよびauthorizationレスポンスヘッダーに対してRSA署名検証を実行します。 RSA署名検証に合格したコールバック要求のみがOSSから送信されます。 このトピックで提供されるサンプルプログラムには、RSA署名検証用のヘッダーが含まれています。

アプリサーバーはコールバック要求を処理します

コールバック要求がOSSから送信されたとアプリサーバーが判断すると、アプリサーバーへのコールバック要求の形式が指定されます。 例:

filename=test.txt&size=5&phone=iphone6s&system=ios9.1

アプリサーバーは、OSSによって送信されたコンテンツを解析して、目的のデータを取得できます。 データが取得された後、アプリサーバは、その後の管理のためにデータを記憶することができる。

OSSはアプリサーバーからの応答を処理します

次のいずれかのシナリオが発生する可能性があります。

  • OSSはコールバック要求をアプリサーバーに送信します。 アプリサーバーがリクエストを受信できないか、アクセスできません。 その場合、OSSはHTTPステータスコード203をAndroidまたはiOSアプリに送信します。 ただし、データはOSSに保存されています。

  • アプリサーバーはOSSからコールバック要求を受信し、OSSに適切に応答します。 その場合、OSSはHTTPステータスコード200と、アプリサーバーからAndroidまたはiOSアプリに応答を返します。

サンプルプログラムのダウンロード

サンプルプログラムは、アプリサーバーが受信した署名のみを調べます。 アプリサーバーが受信したコールバックリクエストの形式を解析するために実行されるコードを手動で追加する必要があります。

  • Java

    • ダウンロードURL: ここをクリック

    • サンプルプログラムを実行するには、ダウンロードしたパッケージを解凍し、java -jar oss-callback-server-demo.jar 9000を実行します。 9000はデフォルトのポートです。 このポート番号は変更できます。

      説明

      JARパッケージの例は、OSS SDK for Java 1.7で実行されます。 エラーが発生した場合は、サンプルコードに基づいてコードを変更します。 このパッケージには、Mavenプロジェクトのコードが含まれています。

  • PHP

    • ダウンロードURL: ここをクリック

    • サンプルプログラムを実行するには、ダウンロードしたパッケージをApache環境に解凍します。 この特定の環境は、PHP固有の機能のためにいくつかのヘッダーを取得する必要があります。 実際の環境に基づいてサンプルコードを変更します。

  • Python

    • ダウンロードURL: ここをクリック

    • サンプルプログラムを実行するには、ダウンロードしたパッケージを解凍し、python callback_app_server.pyを実行します。 このプログラムは、単純なHTTPサーバとして機能する。 このプログラムを実行するには、RSAの依存関係をインストールする必要があります。

  • Ruby

    • ダウンロードURL: ここをクリック

    • サンプルプログラムを実行するには、ruby server.rbコマンドを実行します。

よくある質問

コールバックURLを変更し、別のサーバーを使用してコールバックを受信し、アップロードが成功したかどうかを確認できますか?

パラメーターはOSSサーバーによって署名および検証されており、改ざんされたコンテンツは検証に合格できないため、コールバックURLを変更することはできません。