¿Necesita ayuda en el archivo de imagen múltiple POST usando retrofit?

¿Cómo agregar múltiples imágenes / archivos en un mismo parámetro junto con otros datos de texto usando retrofit?

Single image is uploading perfectly using following interface @Multipart @POST("/users/updateProfile/") public void updateProfileWithImage( @Part("user_id") TypedString first_name, @Part ("image") TypedFile image, Callback<WebResponse> callback); 

Puede utilizar el @MultiPart Post con @PartMap como parámetro

 Map<String, TypedFile> files = new HashMap<String, TypedFile>(); files.put("my file number one", new TypedFile("image/jpg", new File(filename))); files.put("my file number two", new TypedFile("image/jpg", new File(filename))); apiInterface.updateProfileWithImage("first name here", files); private interface ApiInterface{ @Multipart @POST("/users/updateProfile/") Response updateProfileWithImage( @Part("user_id") TypedString first_name, @PartMap Map<String,TypedFile> Files ); } 

Retrofit 2.0 + OkHttp 3

Declaración de interfaz:

 @POST("postpath") Call<Void> upload(@Body MultipartBody filePart); 

Creación de MultiPartBody :

 MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder() .setType(MultipartBody.FORM); 

Luego para cada archivo (también puede agregar campos personalizados)

 requestBodyBuilder.addFormDataPart("extraImage[]", "photo.jpg", RequestBody.create(MediaType.parse("image/jpeg"), byteArrayOrFile)); 

y finalmente

 api.upload(requestBodyBuilder.build()); 

PS puede agregar campos de formulario personalizados (por ejemplo, client.name ) al mismo formulario con

 requestBodyBuilder.addFormDataPart("client[name]", null, RequestBody.create(MediaType.parse("text/plain"), name)) 

o

 requestBodyBuilder.addFormDataPart("client[name]", name)) 

Retrofit 1.9 :

Puede utilizar MultipartTypedOutput para publicar el número variable de parámetros de varias partes.

Además de la respuesta de François, para publicar varias imágenes con el mismo / repetición de nombre de campo (como un array) en retrofit, puede utilizar MultipartTypedOutput

Firma del método:

 @POST("/postpath") SomeResponse upload(@Body MultipartTypedOutput output); 

Uso:

 MultipartTypedOutput multipartTypedOutput = new MultipartTypedOutput(); multipartTypedOutput.addPart("mainImage", new TypedFile("image/jpeg", mainImage)); multipartTypedOutput.addPart("extraImage[]", new TypedFile("image/jpeg", file1)); multipartTypedOutput.addPart("extraImage[]", new TypedFile("image/jpeg", file2)); upload(multipartTypedOutput); 

Corchetes

Tenga en cuenta que algunos frameworks del lado del servidor (Rails) normalmente requieren corchetes (es decir, extraImage[] lugar de extraImage ), otros no (Spring MVC).

  • ¿Existe una forma de reutilizar el código del constructor para la adaptación
  • Formulario Retrofit Codificado y Multipart en solicitud individual
  • Excepción Outofmemory utilizando la biblioteca retrofit android
  • ¿Está haciendo la llamada de red segura en ArrayAdapter?
  • Retrofit: agrega un parámetro de lista de cadenas a la solicitud de múltiples partes
  • ¿Retrofit de cómo manejar dos tipos de respuestas?
  • Uso de Retrofit en Android
  • Múltiples solicitudes con retroadaptación para combinar resultados
  • Retrofit 2.0 OnFailure - Respuesta sin procesar
  • IllegalArgumentException en Retrofit / no debe tener bloque de reemplazo
  • Retrofit 2.0 beta1: cómo publicar cuerpo de cuerda cruda
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.