Ошибка при отправке файла на сервер Retrofit2

299
05 января 2017, 05:47

Отправляю файл на сервер с помощью Retrofit2, использую POST метод для отправки файла, POST метод принимает два параметра "file" и "shared-with":

    @Multipart
    @POST("im-file")
    Call<RequestBody> sendFile(@Part MultipartBody.Part file,
                               @Part("shared-with") String sharedWith);

метод для отправки файлов на сервер:

private void testSendFile(){
    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator + "gallery.png");
    RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    MultipartBody.Part body = MultipartBody.Part.createFormData("picture", file.getName(), requestFile);
    Call<RequestBody> call = BaseApi.getInstance().service.sendFile(body, "bob");
    call.enqueue(new Callback<RequestBody>() {
        @Override
        public void onResponse(Call<RequestBody> call, Response<RequestBody> response) {
            Log.e("Response: ", String.valueOf(response));
            Log.e("Response headers in send file: ", String.valueOf(response.headers()));
            Log.e("Response code in send file: ", String.valueOf(response.code()));
        }
        @Override
        public void onFailure(Call<RequestBody> call, Throwable t) {
            Log.e("File send error: ", t);
        }
    });
}

Получаю 400 ошибку, "message":"Required request part 'file' is not present","path":"/".

Когда тестирую запрос в Postman, то все работает:

Что может быть не так?

Answer 1

Похоже, неправильно задано имя части с файлом. Попробуйте

MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);

вместо

MultipartBody.Part body = MultipartBody.Part.createFormData("picture", file.getName(), requestFile);
READ ALSO
Java. Совместимось интерфейсов

Java. Совместимось интерфейсов

В Java 15 был введен интерфейс Closeable с одним методом close()

273
Не воспроизводится ts-поток

Не воспроизводится ts-поток

Пытаюсь воспроизвести закодированный h264 в MPEG-TS видеопоток, используя стандартный VideoViewВся программа состоит из одной activity с VideoView, Button и EditText

304
Не могу вывести иконку в пункт списка

Не могу вывести иконку в пункт списка

Пытаюсь вывести иконки для пунктов меню, но не совсем знаю как правильно это сделатьПриложение делает следующее: Есть файл json с объектами

288
Переопределение setValueAt

Переопределение setValueAt

Как в этом классе переопределить setValueAt(), относящийся к TableModel?

410