支援續傳的上傳作業

本頁說明如何向 Google Photos Library API 提出支援續傳的上傳要求 宣告內容此通訊協定可讓您繼續執行上傳作業 導致資料流動中斷。

如果您是使用用戶端程式庫的開發人員,請注意部分用戶端程式庫 原生支援支援續傳的上傳作業。

如果您符合下列任一情況,請使用支援續傳的上傳選項:

  • 你正在上傳大型檔案。
  • 網路中斷或其他傳輸錯誤的可能性為 高 (例如您從行動應用程式上傳檔案)。

在有網路的情況下,支援續傳的上傳作業也能減少頻寬用量 匯入作業失敗,因為您不需要從 自訂機器學習模型 但不想花時間從頭調整機器學習參數

步驟 1:啟動上傳工作階段

傳送 POST 要求,以啟動支援續傳的上傳工作階段: https://photoslibrary.googleapis.com/v1/uploads。使用支援續傳的上傳作業 請在此要求中傳回網址,然後上傳檔案。

POST 要求必須包含下列標頭:

標頭欄位
Content-Length 要求主體為 0,因此請設為 0
X-Goog-Upload-Command 請設為 start
X-Goog-Upload-Content-Type 設定為檔案的 MIME 類型,例如 image/jpeg
X-Goog-Upload-Protocol 請設為 resumable
X-Goog-Upload-Raw-Size 設定為檔案資料的位元組總數 已轉移。

以下是 POST 要求標頭:

POST https://photoslibrary.googleapis.com/v1/uploads
Authorization: Bearer oauth2-token
Content-Length: 0
X-Goog-Upload-Command: start
X-Goog-Upload-Content-Type: mime-type
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Raw-Size: bytes-of-file

步驟 2:儲存工作階段網址

如果成功,POST 要求會傳回 200 OK HTTP 狀態碼,包括 。

X-Goog-Upload-URL: url-to-make-uploads-to
X-Goog-Upload-Chunk-Granularity: chunk-granularity-in-bytes

標頭欄位 x-goog-upload-chunk-granularity 包含位元組對齊方式 以及用戶端傳送的所有資料區塊大小和精細程度如果上傳 所有上傳作業都會以多個區塊執行,除了上次上傳,所有上傳作業外。 必須採用這個值的倍數也就是上傳檔案的位元組 必須對齊這個值。在最後一個區塊中,您可以上傳 一個位元組

標頭欄位 X-Goog-Upload-URL 包含必須用於 完成上傳程序。複製並儲存此項目 續傳工作階段網址,這樣便可用於後續的要求。

步驟 3:上傳檔案

有兩種方式可以上傳檔案包含支援續傳的工作階段:

  1. 在單一要求中這通常是最好的做法 因為所需請求的數量較少 因此成效較佳
  2. 分成多個片段。在此方法中 以分塊方式傳送資料資料分為多個部分 x-goog-upload-chunk-granularity 的倍數。如有需要 並重新嘗試分割要求

    如果符合以下描述,請使用這個方法:

    • 您需要減少任一單一 請求。如果在報表設有固定時間限制的情況下 個別要求
    • 您需要提供自訂指標來表示上傳內容 進度。
    • 您必須知道何時可以安全捨棄資料。

單一請求

如何透過單一要求上傳檔案:

  1. 建立 POST 要求至可續傳的工作階段網址。
  2. 將檔案資料新增至要求主體。
  3. 新增下列 HTTP 標頭:

    • Content-Length:設為 檔案。
    • X-Goog-Upload-Command:設為 upload, finalize
  4. 傳送要求。

如果上傳要求中斷,或是你收到 5xx 請按照恢復 中斷上傳

如果要求成功,您會收到 200 OK HTTP 狀態。 程式碼和上傳權杖。 建立 使用這個上傳憑證建立媒體項目

多個區塊

如何將檔案分成多個區塊上傳:

  1. 建立 POST 要求至可續傳的工作階段網址。
  2. 將區塊的資料新增至要求主體。

    除了完成上傳作業的最終區塊之外,請建立 將其他區塊轉換為可接受的區塊大小。保留 區塊的區塊越大,上傳效率越好

  3. 新增下列 HTTP 標頭:

    • Content-Length:設為 區塊
    • X-Goog-Upload-Command:設為 upload。 針對最後一個區塊,請設為 upload, finalize
    • X-Goog-Upload-Offset:設為 例如位元組請注意,您必須上傳位元組 依序執行第一個偏移量是 0
  4. 傳送要求。

    如果上傳要求中斷,或是你收到 5xx 請按照恢復 中斷上傳

  5. 針對檔案中的每個其餘區塊重複上述步驟。

如果要求成功,您會收到 200 OK HTTP 狀態。 程式碼和上傳權杖。 建立 使用這個上傳憑證建立媒體項目

範例

單一請求

以下範例說明透過可續傳的要求 在單一要求中匯入 3,039,417 位元組 JPEG 檔案

POST https://photoslibrary.googleapis.com/v1/uploads HTTP/1.1
Content-Length: 0
X-Goog-Upload-Command: start
X-Goog-Upload-Content-Type: image/jpeg
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Raw-Size: 3039417
[no body]

回應會包含上傳網址和預期的區塊大小:

HTTP/1.1 200 OK
X-Goog-Upload-URL: https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable
X-Goog-Upload-Chunk-Granularity: 262144

最終的上傳要求:

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 3039417
X-Goog-Upload-Command: upload, finalize
X-Goog-Upload-Offset: 0

[BYTES 0-4199999]

多個區塊

以下範例說明透過可續傳的要求 3,039,417 位元組 JPEG 檔案,分成多個區塊,透過可續傳工作階段 取得的網址和可接受的區塊大小精細程度。 這個範例使用 262,144 個位元組的區塊大小, 標頭欄位 x-goog-upload-chunk-granularity (如果 請注意,每次上傳都包含的位元組 是 262,144 的倍數

初始化上傳工作階段,接收上傳網址和區塊大小 如前一步驟所述:

POST https://photoslibrary.googleapis.com/v1/uploads HTTP/1.1
Content-Length: 0
X-Goog-Upload-Command: start
X-Goog-Upload-Content-Type: image/jpeg
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Raw-Size: 3039417
[no body]

回應會包含上傳網址和預期的區塊大小:

HTTP/1.1 200 OK
X-Goog-Upload-URL: https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable
X-Goog-Upload-Chunk-Granularity: 262144

第一區塊:

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 1048576
X-Goog-Upload-Command: upload
X-Goog-Upload-Offset: 0

[BYTES 0-1048575]

第二區塊:

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 1048576
X-Goog-Upload-Command: upload
X-Goog-Upload-Offset: 1048576

[BYTES 1048576-2097151]

最後區塊:

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 942265
X-Goog-Upload-Command: upload, finalize
X-Goog-Upload-Offset: 2097152

[BYTES 2097152-4200000]

繼續中斷的上傳作業

如果上傳要求中斷,或是您收到 200 以外的 HTTP 狀態 程式碼,查詢伺服器,找出上傳作業的成功程度。

以下是對支援續傳工作階段網址的 POST 要求。X-Goog-Upload-Command 應設為 query

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 0
X-Goog-Upload-Command: query

伺服器的回應包含 200 OK HTTP 狀態碼,以及 目前的上傳大小

HTTP/1.1 200 OK
X-Goog-Upload-Status: active
X-Goog-Upload-Size-Received: 100

然後,您可以從這個偏移處繼續上傳。您必須在位移的情況下繼續 附加元件,除非您傳送合併的上傳和敲定指令 在這種情況下,您也可以恢復位移 0 繼續作業。

如果查詢指令的 HTTP 回應中的 X-Goog-Upload-Status 標頭 ,而該值不是 active,表示上傳 已經終止。