Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Subir datos de imagen de varias partes en JSON con Retrofit?

Me gustaría hacer una solicitud PUT con este cuerpo JSON (que contiene una imagen) y con Retrofit. Lo estoy usando bajo Android:

{ "Request": { "data": { "Key": "keydata", "param": { "title": "Testingpostmultipartimageupload", "photo": **"IMAGE BYTE DATA"** } } } } 

¿Alguna pista?

3 Solutions collect form web for “Subir datos de imagen de varias partes en JSON con Retrofit?”

Ok, encontré una solución usando multipart, algo como eso:

 @Multipart @PUT("/users/{id}") void modifyPic( @Header("auth_token") String token, @Path("id") int userid, @Part("request[data][param][title]") String title, @Part("request[data][param][Photo]") TypedFile avatar, Callback<User> cb ); 

Es necesario poner los datos de imagen en bytes mediante el uso de datos de formulario multipart.

 try { HttpPost httppost = new HttpPost("some url"); MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntity.addPart("Image", new FileBody(image)); httppost.setEntity(multipartEntity); mHttpClient.execute(httppost, new YOURHANDLER()); } catch (Exception e) { Log.e(ServerCommunication.class.getName(), e.getLocalizedMessage(), e); } 

Para enviar solicitud de envío con parámetros

 HttpPost httpPost = new HttpPost(url); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); if (values != null) { for (Map.Entry<String, String> entry : values.entrySet()) { nameValuePairs.add( new BasicNameValuePair(entry.getKey(), entry.getValue())); } httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); } 

Retrofit sólo toma multipart y requestbody para su multipart.

 Call<SubmitLevel1Part2IconResp> loadLevel1halfIconswithImage(@Part("headerdata[relation][icon_type]") RequestBody icon_type, @Part("headerdata[relation][name]") RequestBody name, @Part MultipartBody.Part file); 

Y luego en java

  // MultipartBody.Part is used to send also the actual filename MultipartBody.Part body = MultipartBody.Part.createFormData("headerdata[relation][relative_image]", fileUpload.getName(), requestFile); call = service.loadLevel1halfIconswithImage(icon_type, name, body); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.