Подтвердить что ты не робот

Нужна помощь в многократном файле изображения POST с использованием модифицированного оборудования?

Как добавить несколько изображений/файлов по одному и тому же параметру вместе с другими текстовыми данными с помощью модификации?

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);
4b9b3361

Ответ 1

Вы можете использовать @MultiPart Post с @PartMap в качестве параметра

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
    );

}

Ответ 2

Модернизация 2.0 + OkHttp 3

Объявление интерфейса:

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

Создание MultiPartBody:

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

то для каждого файла (вы также можете добавить настраиваемые поля)

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

и, наконец,

api.upload(requestBodyBuilder.build());

P.S. вы можете добавить пользовательские поля формы (например, client.name) в ту же форму с помощью

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

или

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

Дооснащение 1.9:

Вы можете использовать MultipartTypedOutput для публикации переменной количества параметров с несколькими частями.

В дополнение к ответу Франсуа для публикации нескольких изображений с тем же именем/повторяющимся именем поля (как массив) в модификации вы можете использовать MultipartTypedOutput

Подпись метода:

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

Использование:

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);

Квадратные скобки

Обратите внимание, что некоторые серверные фреймворки (Rails) обычно требуют квадратных скобок (т.е. extraImage[] вместо extraImage), другие - не (Spring MVC).