建立或更新 File
時,Google Drive API 可讓您上傳檔案資料。如要瞭解如何建立僅限中繼資料的 File
,請參閱建立檔案一節。
你可以透過下列 3 種方式上傳:
簡易上傳 (
uploadType=media
):不用提供中繼資料,就能透過這種上傳類型傳輸小型媒體檔案 (5 MB 以下)。如要執行簡易上傳,請參閱執行簡易上傳。多部分上傳作業 (
uploadType=multipart
):在單一上傳要求中,使用這種上傳類型傳輸小型檔案 (5 MB 以下) 與描述檔案的中繼資料。如要執行多部分上傳作業,請參閱「執行多部分上傳作業」。支援續傳的上傳作業 (
uploadType=resumable
):這種檔案最適合用於大型檔案 (大於 5 MB),或是出現網路中斷的可能性多 (例如從行動應用程式建立檔案時)。這種上傳功能對大多數應用程式而言是不錯的選擇,因為小型檔案只需最低的單次上傳費用,就能處理少量檔案。如要執行支援續傳的上傳作業,請參閱「執行續傳上傳作業」。
Google API 用戶端程式庫可以實作至少一種上傳類型。請參閱用戶端程式庫說明文件,進一步瞭解如何使用每種類型。
比較PATCH
與 PUT
複習一下,HTTP 動詞 PATCH
支援部分檔案資源更新,HTTP 動詞 PUT
則支援完整的資源替換作業。請注意,在現有資源中加入新欄位時,PUT
可能會導入破壞性變更。
上傳檔案資源時,請遵循下列準則:
- 使用 API 參考資料中記錄的 HTTP 動詞,以用於支援續傳的初始上傳作業。
- 要求開始後,請將所有後續要求都使用
PUT
繼續執行續傳上傳作業。無論呼叫方法為何,這類要求都會上傳內容。
執行簡易上傳
如要執行簡易上傳,請使用 files.create 方法與 uploadType=media
。
以下顯示如何執行簡易上傳:
HTTP
使用
uploadType=media
查詢參數,對方法的 /upload URI 建立POST
要求:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media
將檔案資料新增至要求主體。
新增以下 HTTP 標頭:
Content-Type
:請設為要上傳物件的 MIME 媒體類型。Content-Length
。設為要上傳的位元組數,如果使用區塊轉移編碼,就不需要使用這個標頭。
傳送要求。如果要求成功,伺服器會傳回
HTTP 200 OK
狀態碼,以及檔案的中繼資料。{HTTP}
當您執行簡易上傳時,系統會建立基本中繼資料,並從檔案推測某些屬性,例如 MIME 類型或 modifiedTime
。如果您的檔案較小,且檔案中繼資料不重要,您可以使用簡易上傳。
執行多部分上傳作業
多部分上傳要求可讓您在相同要求中上傳中繼資料和資料。如果您傳送的資料夠小,就算重新上傳一次,也想完整上傳,請使用這個選項。
如要執行多部分上傳作業,請搭配 uploadType=multipart
使用 files.create 方法。
以下說明如何執行多部分上傳作業:
Java
Python
Node.js
PHP
.NET
HTTP
使用
uploadType=multipart
查詢參數,對方法的 /upload URI 建立POST
要求:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
建立要求內文。請根據多部分/相關內容類型 [RFC 2387] 設定內文格式,其中包含 2 個部分:
- 中繼資料。中繼資料必須先存在,且
Content-Type
標頭必須設為application/json;
charset=UTF-8
。新增 JSON 格式的檔案中繼資料。 - 媒體:媒體必須具備第二種格式,且所有 MIME 類型的
Content-Type
標頭都必須相同。將檔案資料加入媒體部分。
以邊界字串標示每個部分,前面加上 2 個連字號。此外,請在最後一個邊界字串後方加上 2 個連字號。
- 中繼資料。中繼資料必須先存在,且
新增這些頂層 HTTP 標頭:
Content-Type
:請設為multipart/related
,並加入您用來識別要求不同部分的邊界字串。例如:Content-Type: multipart/related; boundary=foo_bar_baz
Content-Length
。請設為要求主體中的位元組總數。
傳送要求。
如果只想建立或更新中繼資料部分,但不含相關資料,請將 POST
或 PATCH
要求傳送至標準資源端點:https://www.googleapis.com/drive/v3/files
。如果要求成功,伺服器會傳回 HTTP 200 OK
狀態碼,以及檔案的中繼資料。
建立檔案時,應在檔案的 name
欄位中指定副檔名。例如,建立相片的 JPEG 檔案時,您可以在中繼資料中指定 "name": "photo.jpg"
之類的項目。後續對 files.get 的呼叫會傳回包含 name
欄位最初指定擴充功能的唯讀 fileExtension
屬性。
執行支援續傳的上傳作業
續傳上傳作業可讓您繼續通訊,使通訊作業中斷而中斷資料流。您不必從一開始就重新開始上傳大型檔案,因此如果網路故障,支援續傳的上傳作業也能降低頻寬用量。
如果檔案大小有顯著差異,或是要求有固定的時間限制 (例如行動 OS 背景工作和特定 App Engine 要求),支援續傳的上傳作業就非常實用。在這種情況下,您也可以使用支援續傳的上傳作業,以顯示上傳進度列。
支援續傳的上傳作業包含幾個概略步驟:
- 傳送初始要求,並擷取續傳工作階段 URI。
- 上傳資料並監控上傳狀態。
- (選用) 如果上傳作業有中斷,請繼續執行上傳作業。
傳送初始要求
如要啟動續傳上傳作業,請使用 files.create 方法與 uploadType=resumable
。
HTTP
使用
uploadType=resumable
查詢參數,對方法的 /upload URI 建立POST
要求:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable
如果初始化要求成功,回應內會包含
200 OK
HTTP 狀態碼。此外,其中包含指定可指定續傳工作階段 URI 的Location
標頭:HTTP/1.1 200 OK Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2 Content-Length: 0
儲存續傳工作階段 URI,以便上傳檔案資料並查詢上傳狀態。支援工作階段的工作階段 URI 會在一週後失效。
如果檔案擁有中繼資料,請以 JSON 格式將要求新增至要求內文。否則,請將要求主體留空。
新增以下 HTTP 標頭:
X-Upload-Content-Type
(選用)請設定為檔案的 MIME 類型,將在後續的要求中轉移。如果中繼資料或這個標頭未指定 MIME 類型,物件就會以application/octet-stream.
的形式提供X-Upload-Content-Length
(選用)設定為檔案資料位元組數,這些位元組會在後續要求中轉移。Content-Type
。如果您擁有檔案的中繼資料,則為必填欄位。請設定為application/json;
charset=UTF-8
。Content-Length
。除非使用區塊傳輸編碼。設為這項初始要求的主體中的位元組數。
傳送要求。如果工作階段啟動要求成功,回應就會包含
200 OK HTTP
狀態碼。此外,回應中包含的Location
標頭會指定續傳工作階段 URI。 使用續傳工作階段 URI 上傳檔案資料,並查詢上傳狀態。支援工作階段的工作階段 URI 會在一週後失效。複製並儲存續傳工作階段網址。
前往上傳內容。
上傳內容
你可以透過下列 2 種方式上傳續傳工作階段的檔案:
- 在單一要求中上傳內容:如果對任何要求沒有固定的時間限制,或者不需要顯示上傳進度指標,請使用這個方法。 這個方法最少,因為需要的要求數量較少,也有助於提升效能。
將內容分成多個區塊:如果減少任何單一要求中傳輸的資料量,請使用這個方法。假如每個要求都有固定的時間限制,您可能需要減少傳輸的資料,就像某些 App Engine 要求的類別一樣。如果必須提供自訂指標來顯示上傳進度,這個方法也很有用。
HTTP - 單一要求
- 建立可續傳工作階段 URI 的
PUT
要求。 - 將檔案資料新增至要求主體。
- 新增 Content-Length HTTP 標頭,設為檔案中的位元組數。
- 傳送要求。如果上傳要求中斷,或是收到
5xx
回應,請按照「繼續執行中斷的上傳作業」一文的步驟操作。
HTTP - 多項要求
建立可續傳工作階段 URI 的
PUT
要求。將區塊的資料新增至要求主體。建立不同 256 KB (256 x 1024 位元組) 的區塊,但完成上傳作業的最後一個區塊除外。請盡可能區塊保持區塊大小,以便有效上傳。
新增以下 HTTP 標頭:
Content-Length
。請設為目前區塊中的位元組數。Content-Range
。請設定以顯示上傳檔案中的位元組。舉例來說,Content-Range: bytes 0-524287/2000000
會顯示您要上傳 2,000,000 位元組檔案中的前 524,288 個位元組 (256 x 1024 x 2)。
傳送要求並處理回應。如果上傳要求中斷,或是收到
5xx
回應,請按照「繼續執行中斷的上傳作業」一文的步驟操作。針對檔案中的每個區塊重複執行步驟 1 到 4。在回應中使用
Range
標頭,決定下一個區塊的起始位置。請勿假設伺服器收到上一個要求中傳送的所有位元組。
完整檔案上傳完畢後,您會收到 200 OK
或 201 Created
回應,以及與資源相關聯的所有中繼資料。
繼續執行中斷的上傳作業
如果上傳要求在回應之前終止,或是您收到 503 Service Unavailable
回應,則必須恢復中斷的上傳作業。
HTTP
如要要求上傳狀態,請向可續傳的工作階段 URI 建立空白的
PUT
要求。新增
Content-Range
標頭,指出檔案目前的位置不明。舉例來說,如果檔案的總長度是 2,000,000 位元組,請將Content-Range
設定為*/2000000
。如果不知道檔案的完整大小,請將Content-Range
設為*/*
。傳送要求。
處理回應:
200 OK
或201 Created
回應表示上傳作業已完成,且不需要採取進一步行動。308 Resume Incomplete
回應表示您需要繼續上傳檔案。404 Not Found
回應表示上傳工作階段已過期,因此上傳作業必須從頭開始。
如果您收到
308 Resume Incomplete
回應,請處理回應的Range
標頭,以判定伺服器已收到哪些位元組。如果回應沒有Range
標頭,則表示未收到任何位元組。舉例來說,如果Range
標頭是bytes=0-42
,代表伺服器已接收到檔案的前 43 個位元組,且下一個區塊區塊的開頭是位元組 44。現在您已經知道要從哪裡繼續上傳,請繼續上傳下一個位元組開始的檔案。請加上
Content-Range
標頭來指出您傳送的檔案區段內容,舉例來說,Content-Range: bytes 43-1999999
表示傳送 44 到 2,000,000 的位元組。
處理媒體上傳錯誤
上傳媒體時,請遵循以下最佳做法來處理錯誤:
- 如發生
5xx
錯誤,請繼續執行或重試因連線中斷而失敗的上傳。如要進一步瞭解如何處理5xx
錯誤,請參閱「解決5xx
錯誤」。 - 如有
403 rate limit
錯誤,請重新上傳。如要進一步瞭解如何處理403 rate limit
錯誤,請參閱「解決403 error: Rate limit exceeded
」。 - 針對支援續傳的上傳作業,如有任何
4xx
錯誤 (包括403
),請重新開始上傳。這些錯誤表示上傳工作階段已過期,必須要求新的工作階段 URI 來重新開始。上傳作業會在閒置一週後失效。
匯入 Google 文件類型
在雲端硬碟中建立檔案時,建議您將檔案轉換為 Google Workspace 檔案類型,例如 Google 文件或 Google 試算表。舉例來說,您可能會想將常用的文書處理工具轉換成 Google 文件,以利用其功能。
如要將檔案轉換為特定 Google Workspace 檔案類型,請在建立檔案時指定 Google Workspace mimeType
。
以下說明如何將 CSV 檔案轉換成 Google Workspace 工作表:
Java
Python
Node.js
PHP
.NET
如要瞭解是否有可用的轉換,請在建立檔案前查看關於資源的 importFormats
陣列。此陣列支援支援的轉換。常見的匯入格式包括:
From | 傳送至 |
---|---|
Microsoft Word、OpenDocument Text、HTML、RTF、純文字 | Google 文件 |
Microsoft Excel、OpenDocument 試算表、CSV、TSV、純文字 | Google 試算表 |
Microsoft PowerPoint、OpenDocument 簡報 | Google 簡報 |
JPEG、PNG、GIF、BMP、PDF | Google 文件 (將圖片嵌入文件中) |
純文字 (特殊 MIME 類型)、JSON | Google Apps Script |
上傳 update
要求並將該文件轉換為文件、試算表或簡報時,系統會取代文件的完整內容。
將圖片轉換為文件時,雲端硬碟會使用光學字元辨識 (OCR) 功能將圖片轉換為文字。您可以在 ocrLanguage
參數中指定適用的 BCP 47 語言代碼,藉此改善 OCR 演算法的品質。擷取的文字會顯示在內嵌圖片的 Google 文件中。
使用預先產生的 ID 上傳檔案
雲端硬碟 API 可讓您擷取系統自動產生的檔案 ID 清單,以便上傳及建立資源。上傳和檔案建立要求可以使用這些自動產生的 ID。設定檔案中繼資料的 id
欄位。
如要建立自動產生的 ID,請使用要建立的 ID 數量呼叫 file.generateIds。
伺服器發生錯誤或逾時時,可以使用預先產生的 ID 安全地重試上傳。如果檔案建立成功,後續的重試作業會傳回 HTTP 409
錯誤,且不會建立重複的檔案。
為未知的檔案類型定義可建立索引的文字
使用者可以透過雲端硬碟 UI 搜尋文件內容。您也可以使用 files.list 和 fullText
欄位來搜尋您應用程式中的內容。詳情請參閱「搜尋檔案和資料夾」。
雲端硬碟辨識檔案類型 (包括文字文件、PDF、含有文字的圖片和其他常見類型) 時,會自動搜尋文件。如果您的應用程式儲存其他類型的檔案 (例如繪圖、影片和捷徑),您可以在檔案的 contentHints.indexableText
欄位中提供可建立索引的文字,提高可偵測性。
如要進一步瞭解可建立索引的文字,請參閱管理檔案中繼資料。