リージョン ID
REGION_ID
は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r
が App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。
詳しくは、リージョン ID をご覧ください。
Google Cloud Storage に直接アップロードする場合は、特定の URL に HTTP POST を行います(詳しくは後で説明します)。App Engine は特定のアップロード サービスを使用して投稿を処理し、Google Cloud Storage にファイルを書き込みます。ファイルの書き込みが完了すると、App Engine はアップロードの完了をアプリに通知します。アプリは完了時にのみ呼び出されるため、この方法では非常に大きいファイルをアップロードできます(現在の上限は 100 TB です)。
App Engine アプリから Google Cloud Storage に書き込む場合、インスタンス時間を消費し、コストがかかるため、ファイルを Google Cloud Storage に直接アップロードするほうが高速で、費用対効果が高くなります。また、アプリケーションに対するリクエスト内でファイルの書き込みは行われません。リクエストのタイムアウトも適用されないため、非常に大きなファイルでもアップロードが可能になります。
ファイル アップロードの実装
ユーザーにファイルのアップロードを許可するには:
CloudStorageTools
をインポートします。.php
ファイルで、次のように CloudStorageTools::createUploadUrl() メソッドを使用して、アプリケーション固有のアップロード URL を作成します。使用可能なオプションについては、
createUploadUrl
オプションをご覧ください。my_bucket
はYOUR_APP_ID
になります (デフォルトのバケットを使用している場合はREGION_ID.r.appspot.com
)。この URL へのアップロードは、URL の作成後 10 分以内に開始する必要があります。また、URL の変更はできません。アップロードの開始前に URL の署名が確認されます。
アップロードを許可するフォームに、この URL をアクションとして使用します。
ファイルがアップロードされると、createUploadUrl
の最初のパラメータとして指定されたパスに POST が実行されます。上記の例では、これは /upload_handler.php
です。PHP ランタイムは適切な $_FILES
スーパー グローバルを形成します。tmp_filename
は Google Cloud Storage に新しくアップロードされたファイルの名前を表します。
たとえば、upload_handler.php に次のようなコンテンツが含まれているとします。
var_dump($_FILES);
hello.txt
というファイルをアップロードすると、次のような出力が表示されます。
array(1) {
['uploaded_files']=>
array(5) {
['name']=> string(14) 'hello.txt'
['type']=> string(10) 'text/plain'
['tmp_name']=> string(73) 'gs://my_bucket/L2FwcHMtdXBsb2FkL2Jsb2JzL2IxNUFBVGNJNXNTd0VqR0tFSUtDRGxadGc'
['error']=> int(0)
['size']=> int(1452)
}
}
アップロードが完了したら、アップロードされたファイルを gs://
ストリーム ラッパーで読み取ることができます。アップロードされた他のファイルと同様に、move_uploaded_file
を使用します。次に例を示します。
createUploadUrl
オプション
次の表に有効な createUploadUrl
オプションを示します。
オプション | 説明 |
---|---|
max_bytes_per_blob |
整数。デフォルト値: unlimited 。アップロードする blob の最大サイズ。 |
max_bytes_total |
整数。デフォルト値: unlimited 。アップロードする blob の合計サイズ。 |
gs_bucket_name |
文字列。blob アップロードする Google Cloud Storage バケットの名前。値を指定しないと、blob はアプリケーションのデフォルト バケットにアップロードされます。 |