ユーザーによるファイル アップロードの許可

Google Cloud Storage に直接アップロードする場合は、特定の URL に HTTP POST を行います(詳しくは後で説明します)。App Engine は特定のアップロード サービスを使用して投稿を処理し、Google Cloud Storage にファイルを書き込みます。ファイルの書き込みが完了すると、App Engine はアップロードの完了をアプリに通知します。アプリは完了時にのみ呼び出されるため、この方法では非常に大きいファイルをアップロードできます(現在の上限は 100 TB です)。

App Engine アプリから Google Cloud Storage に書き込む場合、インスタンス時間を消費し、コストがかかるため、ファイルを Google Cloud Storage に直接アップロードするほうが高速で、費用対効果が高くなります。また、アプリケーションに対するリクエスト内でファイルの書き込みは行われません。60 秒の時間上限も適用されないため、非常に大きなファイルでもアップロードが可能になります。

ファイル アップロードの実装

ユーザーにファイルのアップロードを許可するには:

  1. CloudStorageTools をインポートします。

    use google\appengine\api\cloud_storage\CloudStorageTools;
  2. .php ファイルで、次のように CloudStorageTools::createUploadUrl() メソッドを使用して、アプリケーション固有のアップロード URL を作成します。

    $options = ['gs_bucket_name' => $my_bucket];
    $upload_url = CloudStorageTools::createUploadUrl('/upload/handler', $options);

    使用可能なオプションについては、createUploadUrl オプションをご覧ください。デフォルトのバケットを使用している場合、my_bucketYOUR_APP_ID.appspot.com になります。

  3. この URL へのアップロードは、URL の作成後 10 分以内に開始する必要があります。また、URL の変更はできません。アップロードの開始前に URL の署名が確認されます。

  4. アップロードを許可するフォームに、この URL をアクションとして使用します。

    <form action="{{ upload_url }}" enctype="multipart/form-data" method="post">
        Files to upload: <br>
       <input type="file" name="uploaded_files" size="40">
       <input type="submit" value="Send">
    </form>

ファイルがアップロードされると、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 を使用します。次に例を示します。

$file_name = $_FILES['uploaded_files']['name'];
$temp_name = $_FILES['uploaded_files']['tmp_name'];
move_uploaded_file($temp_name, "gs://${my_bucket}/${file_name}.txt");

createUploadUrl オプション

次の表に、有効な createUploadUrl オプションを示します。

オプション 説明
max_bytes_per_blob 整数。デフォルト値は unlimited です。アップロードする blob の最大サイズ。
max_bytes_total 整数。デフォルト値は unlimited です。アップロードする blob の合計サイズ。
gs_bucket_name 文字列。blob アップロードする Google Cloud Storage バケットの名前。値を指定しないと、blob はアプリケーションのデフォルト バケットにアップロードされます。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

PHP 5 の App Engine スタンダード環境