このトピックでは、アプリケーションサーバーでPythonコードを使用してリクエストに署名を追加し、アップロードコールバックを設定してから、フォームアップロードを使用してデータをObject Storage Service (OSS) にアップロードする方法について説明します。
手順
このトピックで使用するROSテンプレートファイル: Python-ros.yml
迅速な展開
Resource Orchestration Service (ROS) を使用して、1つのECS (Elastic Compute Service) インスタンスと1つのOSSバケットを設定し、ECSインスタンスにアプリケーションサーバーソースコード (Python) とクライアントソースコードをデプロイできます。 ROSを使用してアプリケーションサーバーでPythonコードを使用して署名を計算し、アップロードコールバックを設定してから、フォームアップロードを使用してデータをOSSにアップロードするには、次の手順を実行します。
数回クリックするだけでクラウドリソースをデプロイできます。
ROSコンソールで [Quick deployment template] リンクを開きます。
ROSコンソールの [スタックの作成] ウィザードの [テンプレートの選択] ステップで、スタック名と作成するOSSバケットの名前を入力します。 購入するECSインスタンスのゾーン、インスタンスタイプ、システムディスクカテゴリ、およびパスワードを指定し、作成する をクリックします。
表示されるページの [スタック情報] タブで、スタックのステータスは [作成中] になります。
スタックのステータスが [作成済み] になったら、[出力] タブをクリックして、数回クリックするだけでデプロイされるECSインスタンスやOSSバケットなどのリソースを表示します。
アプリケーションサーバーから署名情報を取得し、OSSにデータをアップロードします。
[出力] タブで、UploadPathの値をコピーしてブラウザで開きます。
[WebクライアントからOSSへのデータ転送] ページで、[ファイルの選択] をクリックし、特定の種類のファイルを選択し、[アップロード] をクリックします。
不要なコストを回避するためにテストリソースをリリースします。
スタックページの右上隅にある 削除 をクリックします。
リソーススタックの削除 ダイアログボックスで、スタックを削除する方法 を リソースのリリース に設定し、決定 をクリックします。
手動展開
前提条件
アプリケーションサーバーのドメイン名は、インターネット経由でアクセスできます。
Python 2.6以降がアプリケーションサーバーにインストールされます。 Pythonのバージョンを表示するには、python -- versionコマンドを実行します。
JavaScriptはコンピュータのブラウザでサポートされています。
手順1: アプリケーションサーバーの設定
Pythonでアプリケーションサーバーのソースコードパッケージをダウンロードします。
この例では、Ubuntu 16.04が使用されます。 ソースコードパッケージを /home/aliyun/aliyun-oss-appserver-pythonディレクトリに解凍します。
ディレクトリに移動し、appserver.pyファイルを開き、次のスニペットを変更します。
# The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. access_key_id = 'yourAccessKeyId' access_key_secret = 'yourAccessKeySecret' # Specify the access address of the host in the https://bucketname.endpoint format. host = 'https://examplebucket.oss-cn-hangzhou.aliyuncs.com' # Specify the URL of the application server to which an upload callback request is sent. This URL is used for communication between the application server and OSS. After you upload an object, OSS uses the URL to send information about the object upload to the application server. callback_url = "https://192.168.0.0:8888" # Specify the prefix of the object that you want to upload. You can leave this parameter empty. If you do not specify this parameter, the object is uploaded to the root directory of the bucket. upload_dir = 'exampledir/'
ステップ2: クライアントの設定
クライアントソースコードパッケージをダウンロードします。
パッケージをディレクトリに解凍します。 この例では、D:\aliyun\aliyun-oss-appserver-jsディレクトリが使用されています。
ディレクトリに移動し、upload.jsファイルを開き、次のコードを見つけます。
// serverUrl specifies the URL of the application server that returns information such as the signature and upload policies. Replace the value of serverUrl with the actual IP address and port number of the application server. serverUrl = 'http://192.0.2.0:8888'
署名やアップロードポリシーなどの情報をクライアントに返すアプリケーションサーバーのURLに
serverUrl
を設定します。 この例では、serverUrlはhttps:// 192.168.0.0:8888
に設定されています。
ステップ3: CORSの設定
フォームアップロードを使用してクライアントからOSSにデータをアップロードすると、クライアントはブラウザを使用してOrigin
ヘッダーを含むリクエストをOSSに送信します。 次に、Origin
ヘッダーを含むリクエストが、バケットに対して設定したクロスオリジンリソース共有 (CORS) ルールと一致するかどうかを確認します。 したがって、POSTメソッドを使用してバケットにデータをアップロードする前に、バケットのCORSルールを設定する必要があります。 詳細については、「CORS」をご参照ください。
ステップ4: アップロードコールバック要求を送信する
アプリケーションサーバを起動します。
/home/aliyun-oss-appserver-pythonディレクトリで、python appserver.py 11.22.XX.XX 1234コマンドを実行して、アプリケーションサーバーを起動します。
説明IPアドレスとポート番号を、構成したアプリケーションサーバーのIPアドレスとポート番号に置き換えます。
クライアントを起動します。
コンピュータにインストールされているクライアントで、クライアントソースコードのディレクトリにあるindex.htmlファイルを開きます。
重要index.htmlファイルは、Internet Explorer 10以前と互換性がない場合があります。 Internet Explorer 10以前を使用しているときに問題が発生した場合は、デバッグを実行します。
ファイルをアップロードします。
[ファイルの選択] をクリックし、特定の種類のファイルを選択し、[アップロード] をクリックします。 オブジェクトをアップロードすると、アプリケーションサーバーから返されたコンテンツが表示されます。