區域 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 分鐘內,開始上傳到這個網址。而且,您無法以任何方式變更這個網址,因為網址已經過簽署,且在上傳開始之前會先檢查簽名。
使用這個網址做為您用來接受上傳的表單動作,例如:
檔案上傳完成後,系統會將 POST 傳送至指定為 createUploadUrl
第一個參數的路徑,在上述範例中,這個路徑為 /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 會上傳至應用程式的預設值區。 |