2012-05-22 2 views
0

Я работаю над delphi api для документов Google и с трудом получаю загрузку на работу. Я следую за руководство развития компании Google here и от того, что я понимаю, что это выглядит как процесс должен идти, как это:Загрузка файла в Документы Google 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-Type и X-Upload-Content-Length
  2. Получить 200 OK ответа со следующим адресом загрузки сохраненного в Location заголовке
  3. Сделать запрос PUT на Location заголовок с набором заголовка Content-Type к тому, что я имел X-Upload-Content-Type набор в шаге 1 и заголовок Content-Range множество т о чем-то вроде этого: bytes 0-524287/2097152 и первый 512kb данных в организме
  4. Получить 308 Resume Incomplete ответ, который имеет следующее местоположение загрузки в заголовке Location
  5. Вернуться назад к 3, пока все байты не будут загружены, в какой момент я буду получите ответ 201 Created, который будет содержать данные xml, описывающие загруженный файл

Все вплоть до этапа 3 работает нормально. На шаге 4 все начинает идти не так.

Единственное, что меня смущает больше всего, так это то, что ответ на шаге 4 не содержит заголовок Location. Я понял, что это означает, что я должен просто отправить следующий запрос на тот же URL-адрес, но это заставляет меня получить ошибку 504. Я попробовал весь процесс с помощью скрипача, чтобы убедиться, что это был код delphi, отсутствие понимания с моей стороны или что-то, что делает Google.

Вот запросы и ответы я послал и получил с помощью скрипача:

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 

Единственное, что я смог сделать, чтобы быть в состоянии сказать, за то, что это не просто код Дельфы это неправильно, и поскольку я не думаю, что это google, мне нужно будет идти, я не понимаю, что должно произойти. Что мне не хватает?

Редактировать

Я был в состоянии получить работу загрузки, я не совсем уверен, что я сделал по-другому, но в документации немного вводит в заблуждение. По крайней мере, это для меня. Когда вы отправляете запрос PUT, вы не получаете новое местоположение, вы просто продолжаете загружать его в тот же самый. Кроме того, когда вы закончите загрузку, ответ 201 не содержит фактические данные XML, вместо этого он имеет заголовок Location, который указывает на то, где вы можете захватить данные XML. Не огромная сделка, но немного запутанная.

ответ

Смежные вопросы