2012-07-31 1 views
1

사용자에게 Google 문서 도구 통합 기능을 제공하는 PHP 응용 프로그램이 있으며 사용자의 문서 계정에 직접 파일을 업로드하는 기능을 추가하려고합니다. 내 요구 사항이 간단하기 때문에 PHP/cURL을 사용하여 내 자신을 굴리며이 기능 하나만 Zend Framework를 사용하고 싶지는 않습니다.)Google 문서 도구의 첫 번째 청크를 보낸 후 503 회 반응 cURL을 사용하여 재개 가능한 업로드

것은 내가 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) 내가 업로드 URI에 다음과 같은 헤더와 POST를 보낼 :

여기에 일련의 이벤트입니다

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 

서버로 응답 : 그래서

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 

멀리, 너무 좋아. 이 개시 될 수있다

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 

:

Host: docs.google.com 
Content-Length: 512 
Content-Type: text/plain 
Content-Range: bytes 0-511/2652 

서버로 응답

2) I는이 헤더를 이용하여 응답에서 URL을 제 청크 (512 바이트) PUT 내 문제는, 내가 서버에서 범위 헤더를 다시 설명서에 설명 된대로받지 않습니다. 그러나 불완전한 재개 29 답변을 얻기 위해서는 뭔가가 작동해야합니다.

3) 나는 다음 청크의 (가) (I 생각하여 다음 청크) 올바른 헤더 및 범위 정보를 보낼 때 :

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 
: 난 항상 서버에서이 응답을

Host: docs.google.com 
Content-Length: 512 
Content-Type: text/plain 
Content-Range: bytes 512-1023/2652 

다른 유형의 파일, 청크 크기 등을 시도했지만 항상 동일한 결과를 얻습니다. 내가 (위의 문서 링크 당) 서버에 의해 수신 된 바이트 수를 얻기 위해 시도하는 요청을 보내는 경우 이상하게 :

PUT <upload_uri> HTTP/1.1 
Host: docs.google.com 
Content-Length: 0 
Content-Range: bytes */100 

을 나는 (예상대로) 308 이력서 불완전한 응답을 얻을 수 있지만, 여전히 Range 헤더가 없습니다. 나는 어딘가에서 어리석은 짓을하고 있다고 확신하지만, 벽을 오랫동안 두드려 본 채로는 볼 수 없다.

+0

정확히 동일한 문제가 있지만 최신 API로 전환 할 수 없습니다. 결국이 문제를 해결할 수 있었습니까? – Robbert

+0

이 문제가 해결 되었습니까? – ashishb

답변

1

새로운 드라이브 API를 사용해 보셨습니까? PHP library은 젠드 프레임 워크를 기반으로하지 않으며 설명서에는 snippetscomplete PHP sample application이 포함됩니다. https://developers.google.com/drive/manage-uploads

+0

감사합니다. @Claudio - Google 드라이브 API를 사용해 보겠습니다. 나는 Google 드라이브 (메커니즘은 비슷해 보입니다.)에서 동일한 문제가 발생할 수 있다는 느낌이 들기 때문에 여기에서 잘못된 점을 파악하고 싶습니다. :) 그러나 우리는보아야합니다 :). – darrenmunk

2

그냥 같은 해결 : 여전히 재개 업로드 프로토콜을 직접 구현하려면

, 당신은 그것이 구글 드라이브 API를 포함하여, 새로운 API를 지원하는 방법을 살펴 보도록한다 Google drive의 문제입니다.

set size chunk = 256 * 1024 
관련 문제