Construcción multipart / form-data con android

Estoy intentando hacer un HttpPost con multiPart/form-data vía mi androide app. Tengo una prueba de cartero que está trabajando con mi api y la vista previa de esa solicitud en el cartero, se parece a esto:

 POST /api/0.1/content/upload HTTP/1.1 Host: 54.221.194.167 X-AUTHORIZATION: 166e649911ff424eb14446cf398bd7d6 Cache-Control: no-cache Postman-Token: 2412eba9-f72d-6f3b-b124-6070b5b26644 ----WebKitFormBoundaryE19zNvXGzXaLvS5C Content-Disposition: form-data; name="file01" {"mime_type":"image/jpeg","title":"IMG_20140131_111622"} ----WebKitFormBoundaryE19zNvXGzXaLvS5C Content-Disposition: form-data; name="file01"; filename="addedaslib.jpg" Content-Type: image/jpeg ----WebKitFormBoundaryE19zNvXGzXaLvS5C 

Estoy intentando replicar eso usando el multipart / form-data con mi HttpPost del androide pero no parece estar trabajando. ¿Hay una forma de "previsualizar" mi solicitud y ver cómo se está publicando en la API? ¿Qué estoy haciendo mal? mi código:

 public HttpResponse invokeXAUTHPOSTService(String url, String token, File file) { client = new DefaultHttpClient(); HttpPost request = new HttpPost(url); HttpResponse response = null; MultipartEntity mpe = new MultipartEntity(); try { Log.v("API", "URL:"+url); request.setHeader("Content-Type", "multipart/form-data"); request.addHeader("X-AUTHORIZATION",token); request.addHeader("Cache-Control", "no-cache"); DRPContentForUpload content = new DRPContentForUpload(file); String jsonObject = DRPJSONConverter.toJson(content); FormBodyPart part1= new FormBodyPart("file01", new StringBody(jsonObject)); FormBodyPart part2= new FormBodyPart("file01", new FileBody(file)); mpe.addPart(part1); mpe.addPart(part2); // request.setEntity(mpe); Log.v("RAW REQUEST", "request looks like:"+mpe.toString()); response = client.execute(request); 

EDITAR

Fui capaz de hablar con mi equipo de API, y me dijeron que mi post realmente se ve así:

 --0ieMJK6PPwcrM_K3KQvl6eNDGqooZPzJcvHOm0 Content-Disposition: form-data; name="file01" Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 8bit {"mime_type":"image/jpeg","title":"IMG_20140131_111622"} --0ieMJK6PPwcrM_K3KQvl6eNDGqooZPzJcvHOm0 Content-Disposition: form-data; name="file01"; filename="IMG_20140131_111622.jpg" Content-Type: application/octet-stream Content-Transfer-Encoding: binary 

Dicho esto, su aún no funciona y escupir de nuevo un error que estoy perdiendo params

Aquí hay una captura de pantalla de las bibliotecas incluidas en mi proyecto:

Introduzca aquí la descripción de la imagen

Así que después de buscar alto y bajo para una respuesta, y casi renunciar, este enlace finalmente ayudó

Aquí está el código de trabajo final:

  public HttpResponse invokeXAUTHPOSTService(String url, String token, File file) { client = new DefaultHttpClient(); HttpPost request = new HttpPost(url); HttpResponse response = null; DRPContentForUpload content = new DRPContentForUpload(file); String jsonObject = DRPJSONConverter.toJson(content); String BOUNDARY= "--eriksboundry--"; request.setHeader("Content-Type", "multipart/form-data; boundary="+BOUNDARY); request.addHeader("X-AUTHORIZATION",token); MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,BOUNDARY,Charset.defaultCharset()); try { entity.addPart("file01", new StringBody(jsonObject)); entity.addPart("file01", new FileBody(file)); request.addHeader("Accept-Encoding", "gzip, deflate"); } catch (UnsupportedEncodingException e) { Log.v("encoding exception","E::: "+e); e.printStackTrace(); } request.setHeader("Accept", "application/json"); request.setHeader("Content-Type", "multipart/form-data; boundary="+BOUNDARY); request.setEntity(entity); try { response = client.execute(request); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return response; } 

¿Es el problema que el tipo MIME para su imagen no se está estableciendo correctamente? Intente utilizar el constructor alternativo para FileBody :

 FormBodyPart part2 = new FormBodyPart("file01", new FileBody(file, "image/jpeg")); 

Dar a ambas partes de la solicitud de varias partes el mismo nombre es un poco sospechoso, pero no parece estar causando problemas aquí.

Si desea ver qué aspecto tiene su cuerpo antes de enviar, intente utilizar EntityUtils.toString (Entity) en la entidad de varias partes después de agregar todos los elementos. La imagen es simplemente binaria por lo que no se imprimirá muy bien, pero los encabezados deben ser legibles.

  • Cómo subir imagen de mapa de bits desde un dispositivo Android?
  • Simple HttpURLConnection archivo POST multipart / form-data de android a google blobstore
  • Problema Envío de archivos multipart con límite a través de Volley
  • ¿Qué son exactamente MultiPartEntity y datos de formulario? ¿Cómo se utilizan para cargar imágenes en android?
  • Broken Pipe al intentar cargar una actualización de archivo grande 2
  • Carga múltiple no funciona con android + rails
  • Realización de una solicitud de publicación de varias partes con matriz de bytes comprimidos jpeg con resorte para android
  • Enviar archivos multiparte con retrofit: 2.0.0-beta1
  • Editar encabezados de MultiPartEntity
  • Cómo utilizar multipart / form-data subir imagen / imagen en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.