区域 ID
REGION_ID
是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r
包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。
详细了解区域 ID。
要将内容直接上传到 Google Cloud Storage,您需要对特定网址发出 HTTP POST 请求(稍后我们将对此进行介绍)。App Engine 随后使用特定的上传服务来处理该 POST 并将文件写入 Google Cloud Storage。文件写入完成后,App Engine 会通知您的应用上传已完成。由于只有在上传完成后才会调用您的应用,因此您可以使用此方法上传非常大的文件(可达到当前大小上限 100 TB)。
用户将文件直接上传到 Google Cloud Storage 比从 App Engine 应用写入 Google Cloud Storage 更快、更具成本效益,因为这会耗费实例小时数并产生费用。而且,向应用发出请求期间,不会执行文件写入操作。因此,直接上传文件时,您不会像其他情况那样受到请求超时的限制,并可上传非常大的文件。
实现文件上传
要实现用户文件上传,请执行以下操作:
导入
CloudStorageTools
:使用
.php
文件中的 CloudStorageTools::createUploadUrl() 方法创建应用特定的上传网址,如下所示:如需详细了解可用的选项,请参阅
createUploadUrl
选项。请注意,my_bucket
为YOUR_APP_ID
。如果使用默认存储桶,则为REGION_ID.r.appspot.com
。请注意,您必须在创建此网址后的 10 分钟内开始上传到此网址。此外,您无法以任何方式更改此网址 - 它已签名并且在上传开始之前,系统会检查签名。
将此网址用作接受上传时所使用表单的操作,例如:
文件上传后,系统会对指定为 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 上传到应用的默认存储桶。 |