Cloud Storage 支援將資料串流到值區,而不需要事先將資料儲存到檔案中。如果您想上傳資料,但不知道上傳開始時的最終大小,例如從程序產生上傳資料,或即時壓縮物件,這項功能就非常實用。
串流時使用檢查碼驗證
由於只能在上傳的初始要求中提供檢查碼,因此串流時通常無法使用 Cloud Storage 的檢查碼驗證。建議您一律使用總和檢查碼驗證,並在串流上傳完成後手動執行驗證;不過,在傳輸完成後驗證,表示在確認資料毀損並移除期間,任何毀損的資料都可存取。
如果您需要在上傳完成及資料可供存取前驗證總和檢查碼,則不應使用串流上傳。建議使用其他上傳選項,在完成物件前執行總和檢查碼驗證。
必要的角色
如要取得上傳串流所需的權限,請要求管理員授予下列其中一種角色:
如要上傳的內容包含物件保留鎖定,請要求管理員授予您 bucket 的 Storage 物件管理員 (
roles/storage.objectAdmin
) IAM 角色。在其他情況下,請要求管理員授予您值區的「儲存空間物件使用者」(
roles/storage.objectUser
) IAM 角色。
這些預先定義角色具備將上傳內容串流至 Cloud Storage 所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
storage.objects.create
storage.objects.delete
- 只有在上傳作業會覆寫現有物件時,才需要這項權限。
storage.objects.list
- 只有在使用 Google Cloud CLI 執行本頁的操作說明時,才需要這項權限。
storage.objects.setRetention
- 只有在上傳的內容包含物件保留鎖定時,才需要這項權限。
如要瞭解如何授予值區角色,請參閱「搭配值區使用 IAM」。
上傳串流
下列範例說明如何從程序串流上傳至 Cloud Storage 物件:
控制台
控制台不支援串流上傳。 Google Cloud 請改用 gcloud CLI。
指令列
將資料管道傳送至
gcloud storage cp
指令,並使用破折號做為來源網址:PROCESS_NAME | gcloud storage cp - gs://BUCKET_NAME/OBJECT_NAME
其中:
PROCESS_NAME
是您要收集資料的程序名稱。例如:collect_measurements
。BUCKET_NAME
是包含物件的值區名稱。例如:my_app_bucket
。OBJECT_NAME
是從資料建立的物件名稱。例如:data_measurements
。
用戶端程式庫
C++
詳情請參閱 Cloud Storage C++ API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱 Cloud Storage C# API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱 Cloud Storage Go API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱 Cloud Storage Java API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱 Cloud Storage PHP API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱 Cloud Storage Python API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
REST API
JSON API
如要執行串流上傳,請使用下列其中一種方法:
支援續傳的上傳作業,並進行下列調整:
上傳檔案資料本身時,請使用多個區塊上傳。
由於您要等到最後一個區塊,才能得知檔案總大小,因此請在中間區塊的
Content-Range
標頭中,使用*
做為檔案總大小。舉例來說,如果上傳的第一個區塊大小為 512 KiB,則該區塊的
Content-Range
標頭為bytes 0-524287/*
。如果上傳第一個區塊後,還剩下 64000 個位元組,請傳送最後一個區塊,其中包含剩餘位元組,並具有值為bytes 524288-588287/588288
的Content-Range
標頭。
單一要求上傳,並進行下列調整:
請按照規格建構要求,並在物件資料可用時,以區塊形式傳送。
XML API
如要執行串流上傳,請使用下列其中一種方法:
支援續傳的上傳作業,並進行下列調整:
上傳檔案資料本身時,請使用多個區塊上傳。
由於您要等到最後一個區塊,才能得知檔案總大小,因此請在中間區塊的
Content-Range
標頭中,使用*
做為檔案總大小。舉例來說,如果上傳的第一個區塊大小為 512 KiB,則該區塊的
Content-Range
標頭為bytes 0-524287/*
。如果上傳第一個區塊後,還剩下 64000 個位元組,請傳送最後一個區塊,其中包含剩餘位元組,並具有值為bytes 524288-588287/588288
的Content-Range
標頭。
單一要求上傳,並進行下列調整: