我正在为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数据的位置。不是一个大问题,但有点混乱。