Ошибка загрузки файла в API Google Диска

Я пытаюсь реализовать клиент REST для Google Диска с помощью Джерси 2.0.

В соответствии со следующим документом я сделал код, который отправляет файлы по составному запросу.

https://developers.google.com/drive/v2/reference/files/insert https://developers.google.com/drive/manage-uploads

    String targetUrl = "https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart&access_token=" + token.access_token;
    WebTarget target = client.target(targetUrl);
    final FileDataBodyPart filePart = new FileDataBodyPart("file", file);
    final MultiPart multipart = new FormDataMultiPart().field("title", file.getName())
        .field("description", file.getName())
        .bodyPart(filePart);
    Response response = target.request(MediaType.APPLICATION_JSON_TYPE)
            .post(Entity.entity(multipart, multipart.getMediaType()));
    System.out.println("response:" + response.readEntity(String.class));

Вот запрос POST по коду.

POST /upload/drive/v2/files?uploadType=multipart&access_token={ACCESS_TOKEN} HTTP/1.1\r\n
Accept: application/json\r\n
Content-Type: multipart/form-data; boundary=Boundary_1_1833261898_1373877178038\r\n
User-Agent: Jersey/2.0 (HttpUrlConnection 1.7.0_25)\r\n
MIME-Version: 1.0\r\n
Host: www.googleapis.com\r\n
Content-Length: 42430\r\n

MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "Boundary_1_1833261898_1373877178038"
Type: multipart/form-data
First boundary: --Boundary_1_1833261898_1373877178038\r\n
Encapsulated multipart part:  (text/plain)
    Content-Type: text/plain\r\n
    Content-Disposition: form-data; name="title"\r\n\r\n
    Line-based text data: text/plain
Boundary: \r\n--Boundary_1_1833261898_1373877178038\r\n
Encapsulated multipart part:  (text/plain)
    Content-Type: text/plain\r\n
    Content-Disposition: form-data; name="description"\r\n\r\n
    Line-based text data: text/plain
Boundary: \r\n--Boundary_1_1833261898_1373877178038\r\n
Encapsulated multipart part:  (text/plain)
    Content-Type: text/plain\r\n
    Content-Disposition: form-data; filename="GoogleDrive.txt"; modification-date="Fri, 12 Jul 2013 08:15:47 GMT"; size=41918; name="file"\r\n\r\n
    Line-based text data: text/plain
Last boundary: \r\n--Boundary_1_1833261898_1373877178038--\r\n

Мой почтовый запрос был отправлен, но произошла следующая ошибка.

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "parseError",
    "message": "Parse Error"
   }
  ],
  "code": 400,
  "message": "Parse Error"
 }
}

Подскажите, пожалуйста, как избежать этой ошибки.


person moomindani    schedule 15.07.2013    source источник


Ответы (1)


Запрос на загрузку должен состоять из двух частей: метаданных и содержимого файла, а часть метаданных должна быть в формате JSON.

В вашем случае вы создаете новую часть с кодировкой формы для каждого атрибута. Используйте ссылку на документы, чтобы увидеть правильное форматирование: https://developers.google.com/drive/manage-uploads#multipart

final MultiPart multipart = new FormDataMultiPart().field("title", file.getName())
    .field("description", file.getName())
    .bodyPart(filePart);

Ваше составное тело должно быть действительным JSON.

person Burcu Dogan    schedule 15.07.2013
comment
Спасибо за ответ, Доган. Как вы сказали, я изменил код и подтвердил, что мой код работает нормально и может отправлять файлы на Google Диск. Спасибо Вам большое. - person moomindani; 15.07.2013