ファイルを公開する

一般的なユースケースとして、ファイルをウェブで一般公開することがあります。PHP 5 スタンダード環境でこれを行うには、次のいずれかの方法を使用します。

  • Google Cloud Storage のファイルをスクリプトで提供する: アプリからファイルが提供されます。
  • Google Cloud Storage からファイルを提供する: ファイルが直接提供されます。
  • app.yaml の静的ハンドラを使用して、アプリでアップロードされたファイルを提供します。

最後の方法では、Cloud Storage を使用しないことに注意してください。

スクリプトからファイルを提供

アプリからファイルを提供する場合は、App Engine の CloudStorageTools クラスをインポートします。

use google\appengine\api\cloud_storage\CloudStorageTools;

現在は、CloudStorageTools::serve を使用して、Google Cloud Storage からファイルを提供できるようになりました。

CloudStorageTools::serve("gs://${my_bucket}/serve.txt");

この方法でアプリからファイルを提供することで、デベロッパーがユーザー ID を判断し、許可されたユーザーだけがファイルにアクセスできるようになります。このアプローチの欠点は、ファイルを提供するためにアプリケーションでこのコードを実行する必要があり、インスタンス時間を消費するため、コストがかさむことです。

Google Cloud Storage から直接ファイルを提供

上記のように、アプリからファイルを提供するよりも、HTTP を介して Cloud Storage から直接ファイルを提供することのほうが、迅速かつ費用対効果の高い方法です。これらのファイルは、ファイルの作成時に、匿名ユーザーが読み取れるように構成する必要があります。下記のスニペットに示すように、acl ストリーム オプションを public-read に設定します。

ファイルが公開設定で Cloud Storage に書き込まれたら、CloudStorageTools::getPublicUrl を使用して、ファイルの公開 URL を取得する必要があります。

次の例では、乱数が含まれる公開設定のファイルを作成し、Cloud Storage バケットに書き込み、Cloud Storage からそのファイルにリダイレクトします。

$options = ['gs' => ['acl' => 'public-read']];
$context = stream_context_create($options);
$fileName = "gs://${my_bucket}/public_file.txt";
file_put_contents($fileName, $publicFileText, 0, $context);

$publicUrl = CloudStorageTools::getPublicUrl($fileName, false);

ただし、このアプローチでは誰でもファイルを読み取ることができるため、誰がファイルにアクセスできるかを制御できないという制約があります。

アプリでアップロードされたファイルの提供

このオプションの詳細については、ファイルを読み書きするその他の方法をご覧ください。