このトピックでは、サーバーのGoで署名を計算し、アップロードコールバックを設定し、フォームアップロードを使用してデータをOSSにアップロードする方法について説明します。
前提条件
- アプリケーションサーバのドメイン名は、インターネットを介してアクセス可能である。
- アプリケーションサーバーにGo 1.6以降がインストールされています。 Goバージョンを確認するには、
go version
コマンドを実行します。 - PCのブラウザはJavaScriptをサポートしています。
手順1: アプリケーションサーバーの設定
- Goにあるアプリケーションサーバーのソースコードをアプリケーションサーバーのディレクトリにダウンロードします。
- Ubuntu 16.04がこの例で使用されています。 ソースコードを
/home/aliyun/aliyun-oss-appserver-go
ディレクトリにダウンロードします。 - ディレクトリに移動します。 ソースコードを含む
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: クライアントの設定
- クライアントソースコードをPCのローカルディレクトリにダウンロードします。
- パッケージを解凍します。 upload.jsファイルを開きます。 次のコードを見つけます。
// serverUrlは、署名情報とアップロードポリシーを返すアプリケーションサーバーのURLを指定します。 ビジネスシナリオでは、サンプルのIPアドレスとポート番号を実際の値に置き換えます。 serverUrl ='http:// 192.0.2.0:8888 '
- severUrlをアプリケーションサーバーのURLに設定します。 この例では、
serverUrl ='http:// 192.0.2.0:1234 '
を指定します。
ステップ3: CORS設定の変更
フォームアップロードを使用してクライアントからOSSにデータをアップロードする場合、クライアントはリクエストにOrigin
ヘッダーを含め、ブラウザーを使用してリクエストをOSSに送信します。 OSSは、クロスオリジンリソース共有 (CORS) 検証用のOrigin
ヘッダーを含むリクエストメッセージを検証します。 POSTメソッドを使用するには、バケットのCORSルールを設定します。
ステップ4: アップロードコールバック要求を送信する
- アプリケーションサーバーを起動します。
/home/aliyun/aliyun-oss-appserver-go
ディレクトリで、go run appserver.go 192.0.2.0 1234コマンドを実行します。説明 IPアドレスとポート番号を、設定したアプリケーションサーバーのIPアドレスとポート番号に置き換えます。 - クライアントを起動します。
- PCで、クライアントのソースコードを含むディレクトリにあるindex.htmlファイルを開きます。重要 index.htmlファイルは、Internet Explorer 10以前と互換性がない場合があります。 Internet Explorer 10以前を使用するときに問題が発生した場合は、デバッグを実行する必要があります。
- [ファイルの選択] をクリックします。 指定したタイプのファイルを選択します。 [アップロード] をクリックします。 オブジェクトがアップロードされると、コールバックサーバーによって返されたコンテンツが表示されます。
- PCで、クライアントのソースコードを含むディレクトリにあるindex.htmlファイルを開きます。
アプリケーションサーバのコアコード解析
アプリケーションサーバーのソースコードは、署名ベースのアップロードとアップロードコールバックを実装するために使用されます。
- 署名ベースのアップロード
署名ベースのアップロード中、アプリケーションサーバーはクライアントから送信された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 } }
詳細については、「コールバック」をご参照ください。