2012-05-22 48 views
0

我正在爲Google文檔開發一個delphi API,並且很難讓上傳工作。我下面谷歌的開發指南here,並從我的理解它是什麼樣子的過程應該是這樣的:將文件上傳到Google Docs Api得到錯誤504

  1. 進行POST請求這個網址:https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false這些標題:X-Upload-Content-TypeX-Upload-Content-Length
  2. 得到一個200 OK與存儲在首部Location
  3. 下一載位置響應請PUT請求到Location頭與頭Content-Type設置爲任何我在步驟1具有X-Upload-Content-Type設置爲與插頭件Content-Range集噸Ø是這樣的:bytes 0-524287/2097152和主體數據的第一512KB
  4. 得到一個308 Resume Incomplete響應已在Location頭中的下一個上載位置
  5. 回到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數據的位置。不是一個大問題,但有點混亂。

回答