このトピックでは、サーバー上のPHPで署名を計算し、アップロードコールバックを設定し、フォームアップロードを使用してデータをOSSにアップロードする方法について説明します。
前提条件
webサーバーがデプロイされています。
ウェブサーバのドメイン名は、インターネットを介してアクセス可能である。
webサーバーはPHPを解析できます。 PHPのバージョンを表示するには、
php -v
コマンドを実行します。説明PHP 5.0以降をインストールする必要があります。
PCのブラウザはJavaScriptをサポートしています。
手順1: webサーバーの設定
このセクションでは、Ubuntu 16.04を例として、さまざまなwebサーバーの環境を構成する方法を示します。 実際のビジネスシナリオに基づいて環境を設定する必要があります。
Apache webサーバーを使用する場合は、次の手順に基づいて環境を設定します。 この例ではApache 2.4.18が使用されます。
webサーバのパブリックIPアドレスを
192.0.2.11
に設定します。 これを行うには、/etc/apache2/apache2.conf
設定ファイルにServerName 192.0.2.11
を追加します。リスニングポートを
8080
に設定します。 これを行うには、/etc/apache2/ports.conf
設定ファイルのポート設定をListen 8080
に変更します。sudo apt-get install libapache2-mod-php5
を実行して、Apache用のPHPモジュールをインストールします。 このモジュールにより、ApacheはPHPファイルを解析できます。
実際のビジネスシナリオに基づいて、IPアドレスとリスニングポートを置き換えることができます。 設定を更新した後、/etc/init.d/apache2 restartを実行してwebサーバーを再起動する必要があります。
NGINX webサーバーを使用する場合は、次の手順に基づいて環境を構成します。 この例ではNGINX 1.19.7を使用します。
次のサンプルコードに示すように、
/etc/nginx/nginx.conf
設定ファイルでパブリックIPアドレスを192.0.2.11
に設定し、リスニングポートを8080
に設定します。サーバ { listen 8080; server_name 192.0.2.11; root /var/www/html; index index.html index.php; location ~ * \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_paramsを含みます。 } }
実際のビジネスシナリオに基づいて、IPアドレスとリスニングポートを置き換えることができます。 設定を更新した後、NGINX webサーバーを再起動する必要があります。
手順2: アプリケーションサーバーの設定
アプリケーションサーバーのPHPソースコードをダウンロードします。
アプリケーションサーバーのソースコードをアプリケーションサーバーの該当するディレクトリに解凍します。 この例では、アプリケーションサーバーをUbuntu 16.04の /var/www/html/aliyun-oss-appserver-phpディレクトリに配置する必要があります。
PCにインストールされているブラウザから、
http:// 192.0.2.11:8080/aliyun-oss-appserver-php/index.html
でサーバーを開きます。Apache webサーバーを使用する場合は、Apacheを有効にしてHTTP認証ヘッダーをキャプチャします。 NGINX webサーバーを使用する場合は、この手順をスキップします。
一部のwebサーバーはAuthorizationヘッダーを自動的に解析するため、アプリケーションサーバーが受信したコールバックリクエストにAuthorizationヘッダーが含まれていない場合があります。 Apache 2は、そのようなウェブサーバの一例である。 Authorizationヘッダーが解析されないように、Apache 2の設定ファイルを変更する必要があります。
Apache 2の /etc/apache2/apache2.conf設定ファイルを開きます。 次のスニペットを見つけて変更します。
<ディレクトリ /var/www/> オプションインデックスFollowSymLinks AllowOverrideすべて 許可されたすべてを要求する </ディレクトリ>
という名前のファイルを作成します。htaccessを /var/www/html/aliyun-oss-appserver-phpディレクトリに保存し、次の内容を入力します。
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP: 許可} 。 RewriteRule .* - [E=HTTP_AUTHORIZATION :%{ HTTP: 許可}] </IfModule>
別のApacheバージョンまたは別のwebサーバーを使用する場合、設定は異なります。
アプリケーションサーバーの設定を変更します。
/var/www/html/aliyun-oss-appserver-php/phpディレクトリで、get.phpファイルを開き、次のスニペットを変更します。
$id= '<yourAccessKeyId>'; // AccessKey IDを入力します。 $key= '<yourAccessKeySecret>'; // AccessKeyシークレットを入力します。 // $hostをhttps:// bucketname.endpointの形式の値に設定します。 この例のホストを実際の情報に置き換えます。 $host = 'https:// bucket-name.oss-cn-hangzhou.aliyuncs.com '; // $callbackUrlをコールバックサーバーのURLに設定します。 IPアドレスとポート番号を実際の情報に置き換えます。 $callbackUrl = 'http:// 192.0.2.11:8080/aliyun-oss-appserver-php/php/callback.php'; $dir = 'user-dir-prefix/'; // // アップロードするオブジェクトの名前のプレフィックスを指定します。
パラメーター
必須
例
説明
id
必須
LTAn *********************
Alibaba CloudアカウントまたはRAMユーザーのAccessKey IDとAccessKeyシークレット。 詳細については、「AccessKeyペアの取得」をご参照ください。
キー
必須
zbnK **************************
host
必須
https://bucket-name.oss-cn-hangzhou.aliyuncs.com
ホストのURL。 URLは
https:// BucketName.Endpoint
形式に従います。 エンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。callbackUrl
必須
http:// 192.0.2.11:8080/aliyun-oss-appserver-php/php/callback.php
アップロードコールバック要求が送信されるアプリケーションサーバーのURL。 このURLは、アプリケーションサーバーとOSS間の通信に使用されます。 オブジェクトをアップロードした後、OSSはURLを使用して、オブジェクトのアップロードに関する情報をアプリケーションサーバーに送信します。
dir
任意
exampledir /
OSSにアップロードされたオブジェクトの名前のプレフィックス。 ビジネス要件に基づいてこのパラメーターを設定します。
ビジネスシナリオでプレフィックス設定が必要ない場合は、このパラメーターを空のままにすることができます。
ステップ3: クライアントの設定
アプリケーションサーバーの /var/www/html/aliyun-oss-appserver-phpディレクトリで、upload.jsファイルを変更します。
PHPアプリケーションサーバーのソースコードの場合、相対パスも適切に機能するため、upload.jsファイルの内容を変更する必要はありません。 ファイルを変更する場合は、serverUrl ='./php/get.php'
設定を見つけ、既存のserverUrl
設定をwebサーバーがデプロイされているアドレスに置き換えます。 これにより、ブラウザとアプリケーションサーバー間の通信が確立されます。 この例では、serverUrl ='http:// 192.0.2.11:8080/aliyun-oss-appserver-php/php/get.php'
設定を使用できます。
ステップ4: CORS設定の変更
フォームアップロードを使用してクライアントからOSSにデータをアップロードすると、Origin
ヘッダーを含むリクエストがブラウザーからOSSに送信されます。 次に、Origin
ヘッダーの値が、バケットに設定したクロスオリジンリソース共有 (CORS) ルールのオリジン設定と一致するかどうかを確認します。 したがって、POSTメソッドを使用してバケットにデータをアップロードする前に、バケットのCORSルールを設定する必要があります。
ステップ5: アップロードコールバック要求を送信する
PCのブラウザのアドレスバーにhttp:// 192.0.2.11:8080/aliyun-oss-appserver-php/index.htmlを入力します。
重要 index.htmlファイルは、Internet Explorer 10以前と互換性がない場合があります。 Internet Explorer 10以前を使用するときに問題が発生した場合は、デバッグを実行する必要があります。ファイルを選択し、ファイルタイプを指定して、ファイルをアップロードします。
オブジェクトをアップロードすると、アプリケーションサーバーから返されたコンテンツが表示されます。
アプリケーションサーバのコアコード解析
アプリケーションサーバーのソースコードは、署名ベースのアップロードおよびアップロードコールバックを実装するために使用されます。
署名ベースのアップロード
署名ベースのアップロード中、アプリケーションサーバーはクライアントから送信されたGETメッセージに応答します。 コードファイルはaliyun-oss-appserver-php/php/get.phpです。 コードスニペットの例:
$response = array(); $response['accessid'] = $id; $response['host'] = $host; $response['policy'] = $base64_policy; $response['signature'] = $signature; $response['expire'] = $end ; $response['callback'] = $base64_callback_body; $response['dir'] = $dir;
コールバックのアップロード
アップロードコールバック中、アプリケーションサーバーはOSSから送信されたPOSTメッセージに応答します。 コードファイルはaliyun-oss-appserver-php/php/callback.phpです。
コードスニペットの例:
// 6。 署名を検証します。 $ok = openssl_verify($authStr、$authorization、$pubKey、OPENSSL_ALGO_MD5); if ($ok == 1) { ヘッダー ("Content-Type: application/json"); $data=配列 ("ステータス"=>"Ok"); エコーjson_encode($data); }
詳細については、「コールバック」をご参照ください。