title: File upload with okhttp
body: <p>Im finishing this project which is using okhttp for communication with a webservice.</p>
  
  <p>All is going fine for regular GETs and POSTs, but I'm not being able to properly upload a file.</p>
  
  <p>The okhttp docs are very lacking on these subjects and everything I found here or anywhere don't seem to work in my case.</p>
  
  <p>It's supposed to be simple: I have to send both the file and some string values. But I can't figured out how to do it. </p>
  
  <p>Following the some samples I found, I first tried this:</p>
  
  <pre><code>RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
      .addFormDataPart("group", getGroup())
      .addFormDataPart("type", getType())
      .addFormDataPart("entity", Integer.toString(getEntity()))
      .addFormDataPart("reference", Integer.toString(getReference()))
      .addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
      .build();
  </code></pre>
  
  <p>It gives me a "400 bad request" error.</p>
  
  <p>So I tried this from the okhttp recipes:</p>
  
  <pre><code>RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
      .addPart(Headers.of("Content-Disposition", "form-data; name=\"group\""), RequestBody.create(null, getGroup()))
      .addPart(Headers.of("Content-Disposition", "form-data; name=\"type\""), RequestBody.create(null, getType()))
      .addPart(Headers.of("Content-Disposition", "form-data; name=\"entity\""), RequestBody.create(null, Integer.toString(getEntity())))
      .addPart(Headers.of("Content-Disposition", "form-data; name=\"reference\""), RequestBody.create(null, Integer.toString(getReference())))
      .addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
      .build();
  </code></pre>
  
  <p>Same result.</p>
  
  <p>Don't know what else to try or what look into to debug this. </p>
  
  <p>The request is done with this code:</p>
  
  <pre><code>// adds the required authentication token
  Request request = new Request.Builder().url(getURL()).addHeader("X-Auth-Token", getUser().getToken().toString()).post(requestBody).build();
  Response response = client.newCall(request).execute();
  </code></pre>
  
  <p>But Im pretty sure that the problem is how Im building the request body.</p>
  
  <p>What am I doing wrong? </p>
  
  <p>EDIT: "getFile()" above returns the a File object, by the way. The rest of the parameters are all strings and ints.</p>