提供檔案的公開存取權

檔案經常會透過網路公開讓所有人存取。如要提供檔案的公開存取權,您可以在 PHP 5 標準環境中使用下列任一種做法:

  • 透過指令碼提供 Google Cloud Storage 中的檔案;在此情況下,應用程式會提供檔案。
  • 透過 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");

如果以這種方法透過應用程式提供檔案,開發人員就能判斷使用者身分,並確保只有獲授權的使用者可存取檔案。這種做法的缺點是,應用程式必須執行這個程式碼才能提供檔案,這樣會耗用執行個體時數並產生費用。

直接透過 Google Cloud Storage 提供檔案

如上所述,除了從應用程式提供檔案之外,還有更快速且更具成本效益的方式:透過 HTTP 直接從 Cloud Storage 提供檔案。檔案必須設定為在檔案寫入時可供匿名使用者讀取。如下列程式碼片段所示,您必須將 acl 串流選項設為 public-read

當檔案寫入 Cloud Storage 並設為可公開讀取後,您必須使用 CloudStorageTools::getPublicUrl 取得檔案的公開網址。

在以下範例中,我們會建立可公開讀取且含有一些隨機數字的檔案、將檔案寫入 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);

這種方法的缺點是,由於任何人都能讀取檔案,因此您無法控制誰能夠存取檔案。

提供透過應用程式上傳的檔案

如要進一步瞭解這個選項,請參閱是否有其他方法可讀取及寫入檔案一節。