Загрузка на Google диск с безымянным именем

Возможно, это повторяющийся вопрос, но я не получил удачного ответа.

Я пытаюсь загрузить какой-то файл на Google Диск. Он успешно загружается, но имя файла остается «Без названия». Вот что я пробовал в запросах curl и python.

завиток

curl -X POST -H 'Content-Type:*/*' 
    -H 'Authorization: Bearer <The access token>' 
    -H 'Content-Length:125' 
    --upload-file 'foo.txt' 
    'https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart' 
    -d '{"title":"foo.txt","description":"test file"}'

Здесь, при попытке с Content-Type:multipart/related; boundary="foo_bar_baz" его ошибка бросания, говорящая «использовать составную часть», при попытке только «составной части» ее высказывание использовать «/». Каким-либо образом файл загружается, но его имя "Без названия"

Вот то же самое в запросе python:

upload_files = requests.post(
  'https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart',
  headers={'Authorization':'Bearer {}'.format(access_token),
           'Content-Type':'*/*', 
           'Content-Length':file_size},
  data={"title":file_name,
        "mimeType": "*/*",
        "parents": [{"id":"root"}],
        "description": "mypdf.pdf"},
  files={'file':file},

)

Пожалуйста, не голосуйте против, если я допустил глупую ошибку, вместо этого оставьте комментарий. Я проверю. Здесь. В моей ситуации я не могу использовать клиент Google Drive. Большое спасибо за то, что дали время проверить мою проблему.


person Swagat    schedule 05.12.2015    source источник


Ответы (1)


Вы неправильно строите составное тело. См. https://developers.google.com/drive/web/manage-uploads#multipart для примера

POST /upload/drive/v2/files?uploadType=multipart HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer your_auth_token
Content-Type: multipart/related; boundary="foo_bar_baz"
Content-Length: number_of_bytes_in_entire_request_body

--foo_bar_baz
Content-Type: application/json; charset=UTF-8

{
  "title": "My File"
}

--foo_bar_baz
Content-Type: image/jpeg

JPEG data
--foo_bar_baz--
person pinoyyid    schedule 05.12.2015
comment
Спасибо, я последовал за тем же. Но не могу понять, где я делаю не так. Насколько мне известно, я отправил заголовок только в теле запроса. Было бы здорово, если бы вы могли указать точное место, где я делаю неправильно (любой из методов вызова url) - person Swagat; 07.12.2015
comment
вставьте фактический HTTP-запрос POST (а не ваш код - сам запрос) в вопрос. Все, что вам нужно сделать, это сравнить то, что вы публикуете, с каноническим примером, который я вставил. - person pinoyyid; 07.12.2015
comment
Извините, но именно так мы можем вызвать API Google с помощью пакета запросов. Он используется для вызова URL-адреса в скрипте Python. Запросы - это просто пакет, такой как curl в python. - person Swagat; 07.12.2015