我正在爲Google文檔開發一個delphi API,並且很難讓上傳工作。我下面谷歌的開發指南here,並從我的理解它是什麼樣子的過程應該是這樣的:將文件上傳到Google Docs Api得到錯誤504
- 進行POST請求這個網址:
https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false
這些標題:X-Upload-Content-Type
和X-Upload-Content-Length
- 得到一個
200 OK
與存儲在首部Location
- 下一載位置響應請PUT請求到
Location
頭與頭Content-Type
設置爲任何我在步驟1具有X-Upload-Content-Type
設置爲與插頭件Content-Range
集噸Ø是這樣的:bytes 0-524287/2097152
和主體數據的第一512KB - 得到一個
308 Resume Incomplete
響應已在Location
頭中的下一個上載位置 - 回到3直到所有字節被上傳,在這一點上,我會收到一個
201 Created
響應,該響應將描述我上傳的文件的xml數據
直到第3步的所有內容都正常工作。在步驟4,事情開始出錯。
令我困惑的一件事是,步驟4中的響應不包含Location
標題。我想這意味着我應該發送下一個請求到相同的網址,但這會導致我得到一個504錯誤。我用小提琴嘗試了整個過程,只是爲了看看它是否是delphi代碼,我的缺乏理解,還是谷歌正在做的事情。
這裏的請求和響應我發送和接收使用招:
POST https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Upload-Content-Type: application/octet-stream
X-Upload-Content-Length: 2097152
Content-Length: 0
Host: docs.google.com
HTTP/1.1 200 OK
Server: HTTP Upload Server Built on May 16 2012 12:03:24 (1337195004)
Location: https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false&upload_id=AEnB2Ur9-9VxMSI6kaFzbybY2qiyzK6kVoKzcZ6Yo02H8Ni4FlQFl_N06DdjZXzp3vSjOPH3CEb_4vDlKZp7VlC0hxpkypzlKg
Date: Tue, 22 May 2012 16:53:27 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate
Content-Length: 0
Content-Type: text/html
PUT https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false&upload_id=AEnB2Ur9-9VxMSI6kaFzbybY2qiyzK6kVoKzcZ6Yo02H8Ni4FlQFl_N06DdjZXzp3vSjOPH3CEb_4vDlKZp7VlC0hxpkypzlKg HTTP/1.1
Content-Type: application/octet-stream
Content-Length: 524288
Content-Range: bytes 0-524287/2097152
Host: docs.google.com
[first 512kb of data here]
HTTP/1.1 308 Resume Incomplete
Server: HTTP Upload Server Built on May 16 2012 12:03:24 (1337195004)
Range: bytes=0-524287
X-Range-MD5: bd9d4ee7afa24b7da0e685f05b5f1f44
Date: Tue, 22 May 2012 16:54:29 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate
Content-Length: 0
Content-Type: text/html
PUT https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false&upload_id=AEnB2Ur9-9VxMSI6kaFzbybY2qiyzK6kVoKzcZ6Yo02H8Ni4FlQFl_N06DdjZXzp3vSjOPH3CEb_4vDlKZp7VlC0hxpkypzlKg HTTP/1.1
Content-Type: application/octet-stream
Content-Length: 524288
Content-Range: bytes 524288-1048575/2097152
Host: docs.google.com
[next 512kb of data]
HTTP/1.1 504 Fiddler - Send Failure
Content-Type: text/html; charset=UTF-8
Connection: close
Timestamp: 10:54:14.056
我能夠做的唯一的事情是能夠說一個事實,即它不是只是的Delphi代碼這是錯誤的,因爲我不認爲這是谷歌,我將不得不去與我不明白應該發生的事情。我錯過了什麼?
編輯
我能得到上傳的工作,我不能完全肯定我做什麼不同,但文檔是有點誤導。至少它是對我的。當您發送PUT請求時,您不會獲得新的位置,只需繼續上傳到同一個位置即可。另外,當您完成上載時,201響應不包含實際的XML數據,而是包含一個Location
標頭,指向您可以從中獲取XML數據的位置。不是一個大問題,但有點混亂。