Вот как я реализовал отправку изображения на сервер, используя метод post
api file:
@POST("api/profilepic/")
@Multipart
Call<PostResult> updateProfile(@Header("Authorization") String token,
@Part MultipartBody.Part file,
@Part("value") RequestBody name);
Вызов Api:
File file = new File(files[0]);
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part fileUpload = MultipartBody.Part.createFormData("file", file.getName(), requestBody);
RequestBody filename = RequestBody.create(MediaType.parse("text/plain"), file.getName());
retrofit = new Retrofit.Builder()
.baseUrl(SERVER_NAME)
.client(UnsafeOkHttpClient.getUnsafeOkHttpClient())
.addConverterFactory(GsonConverterFactory.create())
.build();
api = retrofit.create(GetRemindersApi.class);
Call<PostResult> call1 = api.updateProfile("Token " + token, fileUpload, filename);
call1.enqueue(new Callback<PostResult>() {
@Override
public void onResponse(@NonNull Call<PostResult> call, @NonNull Response<PostResult> response) {
PostResult result = response.body();
if (Objects.requireNonNull(result).getResult().equals("success")) {
profileImage.setImageBitmap(BitmapFactory.decodeFile(file.getAbsolutePath()));
} else {
Toast.makeText(ProfileView.this, result.getError(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(@NonNull Call<PostResult> call, @NonNull Throwable t) {
Toast.makeText(ProfileView.this, t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
});
});
, и он отлично работает для меня.