Vinit_Kumar
Vinit_Kumar

Reputation: 11

Http multipart request using Google Drive API

I am trying to send HTTP multipart request using Google Drive API to insert file in Google Drive.

I am following the link below : Multipart upload

However, I am getting a Bad request error.

Below is the request string which I have created using the documentation link above:

    String content = '\r\n--' + boundary + '\r\n';
    content +='Content-Type: '+'application/json; charset=UTF-8'+'\r\n\r\n';
    content +='{' + '\r\n';
    content +='"title": "My File"'+'\r\n';
    content +='}'+'\r\n\r\n';
    content += '--'+boundary + '\r\n';
    content +='Content-Type: '+'text/plain'+'\r\n';
    content += EncodingUtil.base64Encode(b)+'\r\n';
    content += '-'+boundary+'-\r\n';

Please can someone tell me what I am missing here ??

Upvotes: 1

Views: 2689

Answers (2)

Hamid Mohammadi
Hamid Mohammadi

Reputation: 11

I had this problem too and after trying some changes I finally reached a working example:

Header :

POST /upload/drive/v2/files?uploadType=multipart&access_token=ya29.CjAmA2j6eonCiROaNum-V1cWdFVH2vXpNiXAsXK6iLPu7K54tD4uNsmH-eEycMcnaBE HTTP/1.1
Host: www.googleapis.com
Accept: */*
Content-Type: multipart/related; boundary="foo_bar_baz"
Content-Length: 150

remember to add boundary="foo_bar_baz" in Content-Type field

Body :

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

{
    "title": "My File"
}

--foo_bar_baz
Content-Type: text/txt

JPEG data
--foo_bar_baz--

Upvotes: 1

Julian Knodt
Julian Knodt

Reputation: 11

I was having trouble with this as well, but if you look at the code for the google drive API on github: Github Drive API

The request parameters accept a media object, which can have a body and mimeType.

I was working with a service account, and this lets you upload files directly to drive.

 auth.getApplicationDefault(function(err, authClient) {
  if (err) {
    console.log('Authentication failed because of ', err);
    return;
  }
  if (authClient.createScopedRequired && authClient.createScopedRequired()) {
   var scopes = ['https://www.googleapis.com/auth/drive'];
   authClient = authClient.createScoped(scopes);
  }
  var request = {
  project: "YOUR_PROJECT",
  auth: authClient,
  resource: {
    parents: ['blah']
  },
  media: {
    body: 'hi',
    mimeType: 'text/plain'
  }
 };
 drive.files.create(request, function(err, result) {
    if (err) {
      console.log(err);
    } else {
      console.log(result);
    }
  });
});

Upvotes: 1

Related Questions