JavaScriptを使用してクライアントに署名を追加し、Object Storage Service (OSS) にデータをアップロードできます。 この方法では、クライアントからOSSにオブジェクトを直接アップロードできます。これにより、ワークフローが簡素化され、アップロードが高速化されます。 このトピックでは、POSTポリシーに基づいてクライアントに署名を追加し、フォームアップロードを使用してOSSにデータをアップロードする方法について説明します。
使用上の注意
JavaScriptを使用してクライアントに署名を追加した後、OSSにデータをアップロードできます。 ただし、AccessKey IDとAccessKeyシークレットはJavaScriptコードに含まれているため、公開される場合があります。 サーバーから署名情報を取得してOSSにデータをアップロードするか、STSが提供する一時的な資格情報を使用してOSSにアクセスすることを推奨します。
このトピックで提供されるアプリケーションサーバーコードは、HTML 4、HTML 5、Flash、Silverlightなどのプロトコルをサポートしています。 ブラウザがこれらのプロトコルをサポートしていることを確認します。 「お使いのブラウザがFlash、Silverlight、またはHTML5をサポートしていません! 」というメッセージが表示された場合は、ブラウザをアップグレードする必要があります。
手順
迅速な展開
Resource Orchestration Service (ROS) を使用して、Elastic Compute Service (ECS) インスタンスとOSSバケットを設定し、ECSインスタンスにクライアントソースコードをデプロイできます。 ROSを使用してPOSTポリシーに基づいてクライアントに署名を追加し、OSSにデータをアップロードするには、次の手順を実行します。
数回クリックするだけでクラウドリソースをデプロイできます。
ROSコンソールの [スタックの作成] ウィザードに移動します。
ROSコンソールの [スタックの作成] ウィザードの [テンプレートの選択] ステップで、スタック名と作成するOSSバケットの名前を入力します。 購入するECSインスタンスのゾーン、インスタンスタイプ、システムディスクカテゴリ、およびパスワードを指定し、作成する をクリックします。
表示されるページの [スタック情報] タブで、スタックのステータスは [作成中] になります。
スタックのステータスが [作成済み] になったら、[出力] タブをクリックして、数回クリックするだけでデプロイされるECSインスタンスやOSSバケットなどのリソースを表示します。
クライアントに署名を追加し、データをOSSにアップロードします。
[出力] タブで、UploadPathの値をコピーしてブラウザで開きます。
[WebクライアントからOSSへのデータ転送] ページで、[ファイルの選択] をクリックし、特定の種類のファイルを選択し、[アップロード] をクリックします。
不要なコストを回避するためにテストリソースをリリースします。
スタックページの右上隅にある 削除 をクリックします。
リソーススタックの削除 ダイアログボックスで、スタックを削除する方法 を リソースのリリース に設定し、決定 をクリックします。
手動展開
ステップ1: ブラウザで実行されるクライアントコードをダウンロードする
この例では、フォームデータ (PostObject) をOSSにアップロードするためにPluploadを使用します。 WeChatまたはコンピュータや携帯電話のブラウザで、JavaScriptでサンプルコードを実行できます。 複数のオブジェクトを選択し、オブジェクトがアップロードされるディレクトリを指定できます。 また、アップロードするオブジェクトの名前がアップロードしたローカルファイルの名前と同じかどうか、または名前がOSSによってランダムに指定されているかどうかを指定することもできます。 進行状況バーでアップロードの進行状況を表示できます。
ブラウザークライアントコードパッケージをダウンロードします。
ダウンロードしたパッケージを解凍します。
この例では、フロントエンドプラグインとしてPluploadが使用されています。 ビジネス要件に基づいて別のプラグインを使用できます。
ステップ2: 設定ファイルの変更
アクセス設定を変更します。
upload.jsファイルを開き、次のいずれかの方法を使用してアクセス設定を変更します。
RAM ユーザーの使用
// Alibaba CloudアカウントのAccessKeyペアには、すべてのAPI操作に対する権限があります。 これらの資格情報を使用してOSSで操作を実行することは、リスクの高い操作です。 RAMユーザーを使用してAPI操作を呼び出したり、ルーチンのO&Mを実行することを推奨します。RAMユーザーを作成するには、RAMコンソールにログインします。 accessid= 'yourAccessKeyId'; accesskey= 'yourAccessKeySecret'; // バケットのドメイン名を指定します。 形式: BucketName.Endpoint. 例: http://examplebucket.oss-cn-hangzhou.aliyuncs.com。 host= 'yourHost'; ..... new_multipart_params = { .... 'OSSAccessKeyId': accessid、 .... };
STS の使用
// Security Token Service (STS) から取得した一時的なAccessKeyペアを指定します。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 accessid= 'yourAccessKeyId'; accesskey= 'yourAccessKeySecret'; // バケットのドメイン名を指定します。 形式: BucketName.Endpoint. 例: http://examplebucket.oss-cn-hangzhou.aliyuncs.com。 host = 'http:// examplebucketbucket.oss-cn-hangzhou.aliyuncs.com '; // 指定されたロールのAlibaba Cloudリソース名 (ARN) を指定します。 例: acs:ram::137918634953 ****:role/test。 STS_ROLE = ''; ..... new_multipart_params = { .... 'OSSAccessKeyId': STS.accessid、 // STSから取得したセキュリティトークンを指定します。 'x-oss-security-token':STSToken、 .... };
ロールのARNの詳細については、「AssumeRole」をご参照ください。
STSから一時的なアクセス資格情報を取得する方法の詳細については、「STSが提供する一時的な資格情報を使用してOSSにアクセスする」をご参照ください。
policyText設定を変更して、オブジェクトの有効期間 (有効期限) とアップロードするオブジェクトのサイズ制限 (content-length-range) を変更します。
var policyText = { "expiration": "2023-12-01T12:00:00.000Z", // ポリシー内のオブジェクトの有効期間を指定します。 時刻は UTC である必要があります。 有効期間が終了すると、オブジェクトはアップロードできません。 "conditions": [ ["content-length-range", 0, 1048576000] // アップロードするオブジェクトのサイズ制限を指定します。 単位:バイト この例では、サイズ制限は1 GBです。 アップロードするオブジェクトがサイズ制限を超えると、オブジェクトはOSSにアップロードされません。 サイズ制限を指定しない場合は、最大5 GBのサイズのオブジェクトをアップロードできます。 ] }
詳細については、「付録: ポリシー」をご参照ください。
ステップ3: CORSの設定
フォームアップロードを使用してクライアントからOSSにデータをアップロードすると、Origin
ヘッダーを含むリクエストがブラウザーからOSSに送信されます。 OSSは、Origin
ヘッダーを含むリクエストがクロスオリジンリクエストであるかどうかを確認します。 したがって、POSTベースのリクエストを許可するには、バケットのクロスオリジンリソース共有 (CORS) ルールを設定する必要があります。
ステップ4: クライアントに署名を追加し、OSSにデータをアップロードする
解凍されたダウンロードファイルを格納するディレクトリでindex.htmlファイルを開きます。
[ファイルの選択] をクリックして、アップロードする1つ以上のオブジェクトを選択します。 次に、オブジェクトの命名規則を選択し、オブジェクトを格納するディレクトリを指定します。
[アップロード] をクリックし、アップロードが完了するまで待ちます。
アップロードが完了したら、OSSコンソールにログインしてアップロードオブジェクトを表示します。
コアコード分析
OSSはPOSTリクエストをサポートしています。 Pluploadを使用してリクエストを送信する場合は、POSTリクエストに署名を追加する必要があります。
コードが期待どおりに実行されるようにするには、キー、success_action_status、およびその他のパラメーターの前にOSSAccessKeyIdパラメーターを配置することを推奨します。