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