2012-05-22 27 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数据的位置。不是一个大问题,但有点混乱。

回答