這個處理常式可根據 blob 鍵執行額外的處理工作。
應用程式可以透過類似檔案的串流介面讀取一部分的 Blobstore 值,
上傳 blob
如要建立並上傳 blob,請依照下列程序執行:
1. 建立上傳網址
呼叫
以建立使用者所填寫表單的上傳網址,在表單的 POST
完成時傳送要載入的應用程式路徑。
2. 建立上傳表單
表單必須包含檔案上傳欄位,且表單的 enctype
必須設為
multipart/form-data
。使用者提交表單時,POST
將由建立 blob 的 Blobstore API 來處理。這個 API 另外也會建立 blob 的資訊記錄並儲存在 Datastore 中,然後將修改過的要求以 blob 金鑰的形式傳送至應用程式中的指定路徑。
您必須提供 Content-Type
為 text/html; charset=utf-8
的表單頁面,否則系統會以錯誤的方式解譯任何含有非 ASCII 字元的檔案名稱。
您無法使用全域外部應用程式負載平衡器搭配無伺服器 NEG,處理傳送至 blobstore.create_upload_url
呼叫傳回的 /_ah/upload/
URL 的上傳要求。您必須改為將這些上傳要求直接轉送至 App Engine 服務。您可以透過 appspot.com
網域或直接對應至 App Engine 服務的自訂網域,執行這項操作。
3. 實作上傳處理常式
在這個處理常式中,您可以將 blob 鍵與應用程式資料模型的其他部分儲存在一起。blob 鍵本身仍可從 Datastore 中的 blob 資訊實體存取。請注意,在使用者提交表單並呼叫處理常式後,blob 就已經儲存,而 blob 資訊也已新增至 Datastore。如果應用程式不想保留 blob,您應立即刪除 blob,以防止 blob 成為孤立檔案。
修改使用者要求時,Blobstore 會清空已上傳檔案中的 MIME 區塊,然後以 MIME 區塊標頭的形式加入 blob 金鑰。Blobstore 會保留其他所有表單欄位和部分,並傳送至上傳處理常式。如果您未指定內容類型,Blobstore 會嘗試從副檔名推論。如果無法判斷內容類型,系統會為新建的 blob 指派內容類型application/octet-stream
。
提供 blob
如要提供 blob,您必須以應用程式路徑的形式加入 blob 下載處理常式。 Blob 可透過任何應用程式網址提供。如要在應用程式中提供 blob,請在包含 blob 鍵的回應中放上特殊標頭。App Engine 會以 blob 的內容取代回應的本文。
Blob 位元組範圍
Blobstore 可根據要求,提供某個極大值的一部分,而非完整的值。如要提供部分值,請在外送回應中加入 X-AppEngine-BlobRange
標頭。此標頭的值代表標準的 HTTP 位元組範圍。位元組編號從零開始。空白的 X-AppEngine-BlobRange
會指示 API 忽略範圍標頭,並提供完整的 blob。
範例範圍包括:
0-499
提供值的前 500 個位元組 (從第 0 個位元組至第 499 個位元組,包含首尾)。500-999
提供從第 501 個位元組開始的 500 個位元組。500-
提供從值的第 501 個位元組開始到值結尾的所有位元組。-500
提供值的最後 500 個位元組。
如果位元組範圍對 Blobstore 值有效,Blobstore 會將 206
Partial
Content
狀態碼和要求的位元組範圍傳送至用戶端。如果範圍對值無效,Blobstore 會傳送 416
Requested
Range
Not
Satisfiable
。
Blobstore 不支援在單一要求中提供多個位元組範圍 (例如
100-199,200-299
),即便範圍重複也一樣。
完整的應用程式範例
使用 Blobstore API 與 Cloud Storage
您可以使用 Blobstore API,將 blob 儲存至 Cloud Storage,而非儲存在 Blobstore。您必須按照 Cloud Storage 說明文件所述的程序設定值區,然後在
在上傳處理常式中,您需要處理傳回的 ,並明確儲存稍後用於擷取 blob 的 Cloud Storage 檔案名稱。
您也可以使用 Blobstore API 提供 Cloud Storage 物件。
配額與限制
Blobstore 值所使用的空間會佔用「儲存資料 (可計費)」配額。資料儲存庫中的 Blob 資訊實體會計入資料儲存庫相關的限額中。請注意,Cloud Storage 屬付費使用服務,您需按照 Cloud Storage 價目表支付費用。
如要進一步瞭解整個系統的安全配額,請參閱配額。
除了整個系統的安全配額外,Blobstore 的使用配額還受到下列特別限制:
- 應用程式透過單一 API 呼叫可讀取的 Blobstore 資料量上限為 32 MB。
- 單一表單 POST 可上傳的檔案數量上限為 500 個。