提供对文件的公开访问

一个常见的用例是使文件可通过 Web 公开访问。您可以通过以下任意方式在 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);

这种方法的局限性在于无法控制谁可以访问该文件,因为任何人都可以读取该文件。

传送随您的应用上传的文件

如需查看此选项的完整说明,请参阅可以通过其他方式读写文件吗