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

Object Storage Service:アプリケーションサーバーから署名情報を取得し、OSSにデータをアップロードする

最終更新日:Mar 21, 2024

アップロードポリシーを取得するためにアプリケーションサーバーにリクエストを送信すると、アプリケーションサーバーはアップロードポリシーと署名を返します。 署名を使用して、オブジェクトをobject Storage Service (OSS) にアップロードします。 このメソッドは、フロントエンドページでAccessKeyペアを公開しません。 この方法は、クライアントに署名を追加してOSSにデータをアップロードするよりも安全です。 このトピックでは、アプリケーションサーバーから署名情報を取得し、署名情報を使用してデータをOSSにアップロードする方法について説明します。

プロセス

次の図は、アップロード処理を示しています。

image

権限

OSSにデータをアップロードするには、oss:PutObject権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

サーバーから署名情報を取得するには、アップロードコールバックを設定し、フォームアップロードを使用してデータをOSSにアップロードします。 さまざまなプログラミング言語のサンプルコードについては、次のトピックを参照してください。

コード解析

ここでは、アップロード処理について説明します。

  1. アップロードポリシーを取得するために、アプリケーションサーバーにリクエストを送信します。

    クライアントソースコードパッケージのupload.jsファイルで、次のスニペットのserverUrl変数をアプリケーションサーバーのURLに設定します。

    // serverUrlは、署名とアップロードポリシーに関する情報を返すアプリケーションサーバーのURLを指定します。 サンプルのIPアドレスとポート番号を実際の情報に置き換えます。 
    serverUrl = 'http:// 88.88.XX.XX:8888 ';
    

    アプリケーションサーバーのURLを設定すると、クライアントはGETリクエストをserverUrlに送信して必要な情報を取得します。

    アップロードコールバックは、このトピックで説明するシナリオには関与しません。 したがって、アップロードコールバック機能を無効にするには、クライアントソースコードパッケージのupload.jsファイル'callback' : callbackbodyフィールドをコメントアウトする必要があります。 例:

    {
      'key' : key + '${filename}' 、
      'policy': policyBase64、
      'OSSAccessKeyId': accessid、
      // アプリケーションサーバーから返されるHTTPステータスコードを200に設定します。 デフォルトでは、HTTPステータスコード204が返されます。 
      'success_action_status ' : '200' 、 
      // 'callback' : callbackbody、  
      'signature': signature、} 
  2. アプリケーションサーバーは、アップロードポリシーと署名を返します。

    アプリケーションサーバは、アップロードポリシーおよび署名を用いて、クライアントによって送信されたGET要求に応答する。 コードを変更して、アプリケーションサーバーがクライアントに正しい情報を返すようにすることができます。

    次のサンプルコードは、アプリケーションサーバーによってクライアントに返されるメッセージ本文の内容の例を示しています。

    {
      "accessid":"LTAI5tBDFVar1hoq ****" 、
      "ホスト":"https://post-test.oss-cn-hangzhou.aliyuncs.com" 、
      "ポリシー":"eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wNVQyMDoyMzoyM1oiLCJjxb25kaXRpb25zIjpbWyJjcb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDAwXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVzZXItZGlyXC8i ****" 、
      "signature":"VsxOcOudx ****** z93CLaXPz + 4s=" 、
      "expire":1446727949,
      "dir":"user-dirs/"
    } 

    次の表に、メッセージ本文に含まれるフィールドを示します。

    フィールド

    説明

    accessid

    リクエストの送信に使用されるAccessKey ID。

    ホスト

    アップロード要求の送信先のドメイン名。

    説明

    カスタムドメイン名はサポートされていません。

    policy

    フォームアップロードのポリシー。 ポリシーはBase64-encoded文字列です。 詳細については、「付録: ポリシー」をご参照ください。

    署名

    ポリシーの署名文字列。 詳細については、「付録: 署名」をご参照ください。

    期限切れ

    サーバーによって指定されたポリシーの有効期限。 タイムスタンプはUNIXの時刻形式に従います。 UNIXタイムスタンプは、UTCで1970された1月1日00:00:00から経過した秒数です。

    dir

    アップロードするオブジェクトの名前に含まれるプレフィックス。

  3. PostObject操作を呼び出して、データをOSSにアップロードします。

    説明
    • ファイルフォームフィールドを除き、各フォームフィールド (キーを含む) のサイズは8 KBを超えることはできません。

    • デフォルトでは、アップロードするオブジェクトと同じ名前の既存のオブジェクトが上書きされます。 同じ名前の既存のオブジェクトを上書きしない場合は、アップロード要求にx-oss-forbid-overwriteヘッダーを含め、x-oss-forbid-overwriteヘッダーをtrueに設定します。 この方法では、既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、アップロードは失敗し、OSSはFileAlreadyExistsエラーコードを返します。

    new_multipart_params = {
         // keyは、バケット内のオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txtオブジェクト 
         // filenameは、アップロードするローカルファイルの名前を指定します。 
         'key' : key + '${filename}' 、
         'policy': policyBase64、
         'OSSAccessKeyId': accessid、
         // アプリケーションサーバーから返されるHTTPステータスコードを200に設定します。 このパラメーターを設定しない場合、HTTPステータスコード204が返されます。 
         'success_action_status ' : '200' 、
         'signature': signature、
     };
    

デプロイ手順

迅速な展開

Resource Orchestration Service (ROS) を使用して、Elastic Compute Service (ECS) インスタンスとObject Storage Service (OSS) バケットを設定し、ECSインスタンスにアプリケーションサーバーソースコードクライアントソースコードをデプロイできます。 ROSを使用してアプリケーションサーバーから署名情報を取得し、OSSにデータをアップロードするには、次の手順を実行します。

  1. 数回クリックするだけでクラウドリソースをデプロイできます。

    1. ROSコンソールの [スタックの作成] ウィザードに移動します。

    2. ROSコンソールの [スタックの作成] ウィザードの [テンプレートの選択] ステップで、スタック名と作成するOSSバケットの名前を入力します。 購入するECSインスタンスのゾーン、インスタンスタイプ、システムディスクカテゴリ、およびパスワードを指定し、[次へ] をクリックします。 [チェックと確認] ステップで、設定を確認し、作成する をクリックします。

      表示されるページの [スタック情報] タブで、スタックのステータスは [作成中] になります。

    3. スタックのステータスが作成済みになったら、[出力] タブをクリックして、ECSインスタンスやOSSバケットなどのリソースを表示します。ステータス

  2. アプリケーションサーバーから署名情報を取得し、OSSにデータをアップロードします。

    1. [出力] タブで、OssClientAddressの値をコピーしてブラウザで開きます。

    2. [WebクライアントからOSSへのデータ転送] ページで、[ファイルの選択] をクリックし、特定の種類のファイルを選択し、[アップロード] をクリックします。

  3. 不要なコストを回避するためにテストリソースをリリースします。

    1. スタックページの右上隅にある 削除 をクリックします。

    2. リソーススタックの削除 ダイアログボックスで、スタックを削除する方法リソースのリリース に設定し、決定 をクリックします。

参考資料

ほとんどの場合、アプリケーションサーバは、アップロードされたオブジェクトの名前など、アップロードされたオブジェクトに関する情報を通知される必要がある。 画像をアップロードする場合は、アプリケーションサーバーに画像サイズを通知する必要があります。 上記の要件を満たすようにアップロードコールバックを設定できます。 詳細については、「概要」をご参照ください。