區域 ID
REGION_ID
是 Google 根據您在建立應用程式時選取的地區所指派的縮寫代碼。此代碼不對應至國家/地區或省份,即使部分區域 ID 可能與常用的國家/地區和省份代碼相似。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r
。如果是這段時間前建立的現有應用程式,網址可選擇是否包含地區 ID。
進一步瞭解區域 ID。
您直接將檔案上傳至 Google Cloud Storage 時,系統會對特定網址發出 HTTP POST,相關資訊請見下文。然後,App Engine 會使用特定「上傳服務」來處理 Post,並將檔案寫入 Google Cloud Storage。檔案寫入作業完成時,App Engine 會通知您的應用程式,表示上傳完成。因為只有在上傳完成時才會叫用應用程式,所以您可以使用這種方法來上傳非常大的檔案,目前的上限為 100 TB。
相較於從 App Engine 應用程式寫入 Google Cloud Storage,使用者直接將檔案上傳至 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 會上傳至應用程式的預設值區。 |