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

Object Storage Service:Go

最終更新日:Dec 20, 2023

このトピックでは、サーバーのGoで署名を計算し、アップロードコールバックを設定し、フォームアップロードを使用してデータをOSSにアップロードする方法について説明します。

前提条件

  • アプリケーションサーバのドメイン名は、インターネットを介してアクセス可能である。
  • アプリケーションサーバーにGo 1.6以降がインストールされています。 Goバージョンを確認するには、go versionコマンドを実行します。
  • PCのブラウザはJavaScriptをサポートしています。

手順1: アプリケーションサーバーの設定

  1. Goにあるアプリケーションサーバーのソースコードをアプリケーションサーバーのディレクトリにダウンロードします。
  2. Ubuntu 16.04がこの例で使用されています。 ソースコードを /home/aliyun/aliyun-oss-appserver-goディレクトリにダウンロードします。
  3. ディレクトリに移動します。 ソースコードを含むappserver.goファイルを開きます。 次のスニペットを変更します。
    // AccessKey IDを入力します。 
    var accessKeyId string = "<yourAccessKeyId>"
    
    // AccessKeyシークレットを入力します。 
    var accessKeySecret string = "<yourAccessKeySecret>"
    
    // bucketname.endpointの形式の値にhostを設定します。 
    var host string = "https://bucket-name.oss-cn-hangzhou.aliyuncs.com '"
    
    // アップロードコールバック要求の送信先のアプリケーションサーバーのURLを指定します。 IPアドレスとポート番号を実際の情報に置き換えます。 
    var callbackUrl string = "http:// 192.0.2.0:8888";
    
    // アップロードするオブジェクトの名前のプレフィックスを指定します。 
    var upload_dir文字列="user-dir-prefix/"
    
    // アップロードポリシーの有効期間を秒単位で指定します。 
    var expire_time int64 = 30 
    • accessKeyId: AccessKey IDを入力します。
    • accessKeySecret: AccessKeyシークレットを入力します。
    • host: 形式はhttps:// bucketname.endpointです。 例: https://bucket-name.oss-cn-hangzhou.aliyuncs.com。 エンドポイントの詳細については、「Terms」トピックの「エンドポイント」セクションを参照してください。
    • callbackUrl: アップロードコールバック要求の送信先のアプリケーションサーバーのURLを指定します。 このURLは、アプリケーションサーバーとOSS間の通信に使用されます。 オブジェクトをアップロードした後、OSSはURLを使用してオブジェクトアップロードに関する情報をアプリケーションサーバーに送信します。 この例では、URLをvar callbackUrl string="http:// 192.0.2.0:1234"; に設定します。
    • dir: オブジェクトの名前のプレフィックスを指定します。 このパラメータは空のままにすることもできます。

ステップ2: クライアントの設定

  1. クライアントソースコードをPCのローカルディレクトリにダウンロードします。
  2. パッケージを解凍します。 upload.jsファイルを開きます。 次のコードを見つけます。
    // serverUrlは、署名情報とアップロードポリシーを返すアプリケーションサーバーのURLを指定します。 ビジネスシナリオでは、サンプルのIPアドレスとポート番号を実際の値に置き換えます。 
    serverUrl ='http:// 192.0.2.0:8888 ' 
  3. severUrlをアプリケーションサーバーのURLに設定します。 この例では、serverUrl ='http:// 192.0.2.0:1234 'を指定します。

ステップ3: CORS設定の変更

フォームアップロードを使用してクライアントからOSSにデータをアップロードする場合、クライアントはリクエストにOriginヘッダーを含め、ブラウザーを使用してリクエストをOSSに送信します。 OSSは、クロスオリジンリソース共有 (CORS) 検証用のOriginヘッダーを含むリクエストメッセージを検証します。 POSTメソッドを使用するには、バケットのCORSルールを設定します。

  1. OSSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、[コンテンツセキュリティ] > [クロスオリジンリソース共有 (CORS)] を選択します。
  4. [ルールの作成] をクリックし、次の図に示すようにパラメーターを設定します。
    説明 データのセキュリティを確保するために、OSSでリクエストを許可する実際のドメイン名をソースで指定することを推奨します。 CORS設定の詳細については、「CORSの設定」をご参照ください。

ステップ4: アップロードコールバック要求を送信する

  1. アプリケーションサーバーを起動します。
    /home/aliyun/aliyun-oss-appserver-goディレクトリで、go run appserver.go 192.0.2.0 1234コマンドを実行します。
    説明 IPアドレスとポート番号を、設定したアプリケーションサーバーのIPアドレスとポート番号に置き換えます。
  2. クライアントを起動します。
    1. PCで、クライアントのソースコードを含むディレクトリにあるindex.htmlファイルを開きます。
      重要 index.htmlファイルは、Internet Explorer 10以前と互換性がない場合があります。 Internet Explorer 10以前を使用するときに問題が発生した場合は、デバッグを実行する必要があります。
    2. [ファイルの選択] をクリックします。 指定したタイプのファイルを選択します。 [アップロード] をクリックします。 オブジェクトがアップロードされると、コールバックサーバーによって返されたコンテンツが表示されます。

アプリケーションサーバのコアコード解析

アプリケーションサーバーのソースコードは、署名ベースのアップロードとアップロードコールバックを実装するために使用されます。

  • 署名ベースのアップロード

    署名ベースのアップロード中、アプリケーションサーバーはクライアントから送信されたGETメッセージに応答します。 スニペットの例:

    func handlerRequest(w http.ResponseWriter, r * http.Request) {   
            if (r.Method == "GET") {
                    応答:= get_policy_token()
                    w.Header().Set("Access-Control-Allow-Methods", "POST")
                    w.Header().Set("Access-Control-Allow-Origin", "*")
                    io.WriteString(w、response)
            }
  • アップロードコールバック

    アップロードコールバック中に、アプリケーションサーバーはOSSから送信されたPOSTメッセージに応答します。 スニペットの例:

    if (r.Method == "POST") {
                    fmt.Println("\nHandle Post Request ... ")
    
                    // PublicKeyバイトの取得
                    bytePublicKey, err := getPublicKey(r)
                    if (err != nil) {
                            responseFailed(w)
                            リターン
                    }
    
                    // 許可バイトの取得: Base64Stringからデコード
                    byteAuthorization, err := getAuthorization(r)
                    if (err != nil) {
                            responseFailed(w)
                            リターン
                    }
    
                    // 新しく構築された許可文字列からMD5バイトを取得します。 
                    byteMD5, err := getMD5FromNewAuthString(r)
                    if (err != nil) {
                            responseFailed(w)
                            リターン
                    }
    
                    // verifySignatureとクライアントへの応答 
                    if (verifySignature(bytePublicKey, byteMD5, byteAuthorization)) {
                            // callback_bodyに従ってやりたいことをしてください...
    
                            responseSuccess(w) // 応答OK : 200  
                    } else {
                            responseFailed(w) // 応答失敗: 400 
                    }
            }

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