首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >503使用cURL发送谷歌文档的第一块可恢复上传后的响应

503使用cURL发送谷歌文档的第一块可恢复上传后的响应
EN

Stack Overflow用户
提问于 2012-08-01 00:15:07
回答 2查看 628关注 0票数 1

我有一个为用户提供一些Google Docs集成的PHP应用程序,我正在尝试添加直接将文件上传到用户的Docs帐户的功能(我正在使用PHP/cURL滚动我自己的功能,因为我的需求很简单,并且我不想仅仅为了这一个功能而扰乱Zend Framework )。

我正在按照https://developers.google.com/google-apps/documents-list/#uploading_a_new_document_or_file_with_content_onlyhttps://developers.google.com/gdata/docs/resumable_upload的指示进行操作,在我尝试发送第二个块之前,一切似乎都很正常,在这一点上,我总是收到来自服务器的503服务不可用响应。

以下是事件的完整序列:

1)我向upload URI发送了一个带有以下头部的POST:

代码语言:javascript
运行
复制
Host: docs.google.com
GData-Version: 3.0
Authorization: Bearer (token removed for security reasons, but it's there and correct)
Content-Length: 0
Slug: gmk_google_upload_test.txt
X-Upload-Content-Type: text/plain
X-Upload-Content-Length: 2652

服务器的响应是:

代码语言:javascript
运行
复制
HTTP/1.1 200 OK
Server: HTTP Upload Server Built on Jul 30 2012 11:18:04 (1343672284)
Location: https://docs.google.com/feeds/upload/create-session/default/private/full?convert=false&upload_id=AEnB2Uoa4ba2XrKG58GU3uTSzKUKsQu_NfOUvyYDqW6iXwmHgBPiJsi1fg-RhxMVT7jAfd1o73fUtBaaZ1uLkwNwzT04NxQbuQ
Date: Tue, 31 Jul 2012 16:00:13 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; charset=UTF-8

到现在为止还好。

2)我将第一个块(512字节)放入响应中的URL,使用以下标头:

代码语言:javascript
运行
复制
Host: docs.google.com
Content-Length: 512
Content-Type: text/plain
Content-Range: bytes 0-511/2652

服务器响应:

代码语言:javascript
运行
复制
HTTP/1.1 308 Resume Incomplete
Server: HTTP Upload Server Built on Jul 30 2012 11:18:04 (1343672284)
Date: Tue, 31 Jul 2012 16:00:14 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; charset=UTF-8

这可能是我的问题的开始,因为我没有收到文档中描述的从服务器返回的Range标头。然而,似乎一定有什么办法能让我得到308简历的不完整回复。

3)当我使用(我认为)正确的报头和范围信息发送下一个块时:

代码语言:javascript
运行
复制
Host: docs.google.com
Content-Length: 512
Content-Type: text/plain
Content-Range: bytes 512-1023/2652

我总是从服务器得到这样的响应:

代码语言:javascript
运行
复制
HTTP/1.1 503 Service Unavailable
Server: HTTP Upload Server Built on Jul 30 2012 11:18:04 (1343672284)
Date: Tue, 31 Jul 2012 16:00:14 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; charset=UTF-8

我尝试了不同类型的文件,块大小等,但我总是得到相同的结果。奇怪的是,如果我发送一个请求,试图获取服务器已接收的字节数(根据上面的文档链接):

代码语言:javascript
运行
复制
PUT <upload_uri> HTTP/1.1
Host: docs.google.com
Content-Length: 0
Content-Range: bytes */100

我得到了一个308简历不完整的响应(如预期),但仍然没有Range标头。我确信我在做什么愚蠢的事情,但是我已经用头撞墙太久了,以至于我看不见它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-01 04:36:04

您是否考虑过使用较新的Drive API?PHP library不是基于Zend Framework的,文档包括snippetscomplete PHP sample application

如果你仍然想自己实现resumable upload协议,你应该看看新的API是如何支持它的,包括Google Drive API:

https://developers.google.com/drive/manage-uploads

票数 1
EN

Stack Overflow用户

发布于 2012-08-28 12:58:02

刚刚用Google drive解决了同样的问题。

代码语言:javascript
运行
复制
set size chunk = 256 * 1024
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11744563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档