Subir archivo en Retrofit 2

introduzca la descripción de la imagen aquí

He intentado lo siguiente, pero en la respuesta estoy recibiendo error 500 (Internal Server Error) – me ayudan a diseñar la interfaz para la solicitud en la captura de pantalla anterior … gracias

@Multipart @POST("myrecord") Call<ResponseBody> addRecord(@Query("token") String token,@Query("userid") int userId, @Query("name") String name, @Part("file") RequestBody file); File file = new File(getRealPathFromURI(data.getData())); RequestBody requestFile = RequestBody.create(MediaType.parse("image/*"), getRealPathFromURI(data.getData()));` Call<ResponseBody> responseBodyCall = service.addRecord(token, userId, "newFileName", requestFile); responseBodyCall.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { Log.d("Response", "="+response.code()); Log.d("Response", "= "+response.message()); } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { Log.d("failure", "message = " + t.getMessage()); Log.d("failure", "cause = " + t.getCause()); } });` 

El siguiente código funcionó 🙂

  @Multipart @POST("myrecord") Call<ResponseBody> addRecord(@Query("token") String token, @Query("userid") int userId, @Query("name") String name, @Part MultipartBody.Part file); @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if ((requestCode == FILE_SELECT_CODE) && (resultCode == -1)) { File file = new File(getRealPathFromURI(data.getData())); RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), getRealPathFromURI(data.getData())); MultipartBody.Part multipartBody =MultipartBody.Part.createFormData("file",file.getName(),requestFile); Call<ResponseBody> responseBodyCall = service.addRecord(token, userId, "fileName", multipartBody); responseBodyCall.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { Log.d("Success", "success "+response.code()); Log.d("Success", "success "+response.message()); } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { Log.d("failure", "message = " + t.getMessage()); Log.d("failure", "cause = " + t.getCause()); } }); } } 
 @Multipart @POST("myrecord") Call<ResponseBody> addRecord(@Part("file") RequestBody file,@Part MultipartBody.Part file, @Query("token") String token,@Query("userid") int userId,@Query("name") String name); RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("picture", file.getName(), requestFile); String descriptionString = "your description"; RequestBody description = RequestBody.create( MediaType.parse("multipart/form-data"), descriptionString); 

para obtener más información consulte este enlace: https://futurestud.io/blog/retrofit-2-how-to-upload-files-to-server

Si desea enviar el archivo como binario en un cuerpo sin usar multipart, puede quitar la anotación @Multipart de su código y utilizar @Body anotación. Parece que

 @POST("myrecord") Call<ResponseBody> addRecord(@Query("token") String token,@Query("userid") int userId, @Query("name") String name, @Body RequestBody file); File file = new File(getRealPathFromURI(data.getData())); RequestBody requestFile = RequestBody.create(MediaType.parse("image/*"), getRealPathFromURI(data.getData())); Call<ResponseBody> responseBodyCall = service.addRecord(token, userId, "newFileName", requestFile); responseBodyCall.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { Log.d("Response", "="+response.code()); Log.d("Response", "= "+response.message()); } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { Log.d("failure", "message = " + t.getMessage()); Log.d("failure", "cause = " + t.getCause()); } });` 
  • Retrofit 2.0 lanzando "IllegalArgumentException: los parámetros @Field solo se pueden usar con la codificación de formularios". ¿Cómo hacer la consulta correcta de la API y arreglarlo?
  • Runtime Execption java.lang.NoClassDefFoundError: retrofit2.Platform en Android
  • Convertidor personalizado para Retrofit 2
  • Reajuste de campos opcionales y obligatorios
  • Interrumpir el subproceso JavaRx2 de actualización
  • Cómo manejar el error en Retrofit 2.0
  • Manejo centralizado de errores de actualización 2?
  • Retrofit 2 La solicitud POST multipart envía cotizaciones extra a PHP
  • RxJavaCallAdapterFactory no se puede convertir en Factory
  • Retrofit 2 - Parámetro de consulta de URL
  • Cómo establecer dinámicamente la lista de encabezados en Retrofit 2 (Android)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.