Subir archivo en Retrofit 2
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
- Cómo enviar JSON OBJECT como parámetro en Retrofit 2 (Android)
- Prueba Unitaria de Retrofit 2 api call con Mockito
- Renovar 2 verifica la URL de la llamada
- Encadenamiento de solicitudes en Retrofit + RxJava
- No hay ningún error de este tipo al usar robospice-retrofit y getstream.io
@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()); } });`
- ¿Qué está causando HTTP FALLA: java.net.SocketException: Socket cerrado?
- Okhttp siempre reintento conexión fallida
- Problema del tipo de contenido de Retrofit-2
- Deshabilitar la comprobación de certificados SSL en la biblioteca de actualización
- Android Retrofit2 Actualizar Oauth 2 Token
- Retrofit 2 Método RequestBody writeTo () llamado dos veces
- Retrofit 2 cómo obtener la respuesta de objetos anidados json (android)
- Comprobación de Internet, dónde colocar al usar MVP, RX y Retrofit
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()); } });`
- Ocultar el teclado en fragmento en el exterior haga clic
- La variante actualmente seleccionada "arm-debug" utiliza APK divididos, pero ninguno de los 4 split-apks son compatibles con el dispositivo actual