Загружать динамическое количество файлов с помощью okHttp3

Как управлять загрузкой динамического количества файлов с помощью OkHttp v3, я уже реализовал более старую версию OkHttp, которая была compile 'com.squareup.okhttp:okhttp:2.6.0'

Внесены некоторые изменения в класс Form, и теперь моделируются составные тела. Они заменили непрозрачный FormEncodingBuilder более мощной комбинацией FormBody и FormBody.Builder. Точно так же они обновили MultipartBuilder до MultipartBody, MultipartBody.Part и MultipartBody.Builder.

ниже код более старой версии

final MediaType MEDIA_TYPE = MediaType.parse(AppConstant.arrImages.get(i).getMediaType());

//If you can have multiple file types, set it in ArrayList

MultipartBuilder buildernew = new MultipartBuilder()
        .type(MultipartBuilder.FORM)
        .addFormDataPart("title", title);   //Here you can add the fix number of data.

for (int i = 0; i < AppConstants.arrImages.size(); i++) {  //loop to add dynamic number of files.
    File f = new File(FILE_PATH,TEMP_FILE_NAME + i + ".png");
    if (f.exists()) {
        buildernew.addFormDataPart(TEMP_FILE_NAME + i, TEMP_FILE_NAME + i + FILE_EXTENSION, RequestBody.create(MEDIA_TYPE, f));
    }
}

RequestBody requestBody = buildernew.build();  

//Build the object of MultipartBuilder and get object of RequestBody.

Но теперь для реализации кода OkHttp <version>3.0.1</version> для загрузки файлов код выглядит примерно так, как показано ниже (источник)

RequestBody requestBody = new MultipartBody.Builder()
        .setType(MultipartBody.FORM)
        .addFormDataPart("title", "Square Logo")
        .addFormDataPart("image", "logo-square.png",
            RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
        .build();

Я попробовал ту же логику с MultipartBody, но не нашел плодотворного решения. Или мне нужно реализовать один и тот же if else для разных случаев (что невозможно)


person Arth Tilva    schedule 21.01.2016    source источник


Ответы (1)


Конструктор все еще существует и может быть использован для этого. Сохраните его локально, как вы делали раньше, и измените в цикле:

MultipartBody.Builder buildernew = new MultipartBody.Builder()
      .setType(MultipartBody.FORM)
      .addFormDataPart("title", title);   //Here you can add the fix number of data.

for (int i = 0; i < AppConstants.arrImages.size(); i++) {
    File f = new File(FILE_PATH,TEMP_FILE_NAME + i + ".png");
    if (f.exists()) {
        buildernew.addFormDataPart(TEMP_FILE_NAME + i, TEMP_FILE_NAME + i + FILE_EXTENSION, RequestBody.create(MEDIA_TYPE, f));
    }
}

MultipartBody requestBody = buildernew.build();  
person Jake Wharton    schedule 21.01.2016
comment
@jake Wharton, не могли бы вы ответить на этот вопрос -okhttpclient" title="как добавить список объектов типа userdata в multipartbody в okhttpclient"> stackoverflow.com/questions/52520520/ - person Rahul; 27.09.2018