Вы можете передать List<MultipartBody.Part>
как @Part
в запросах на модернизацию, если вы используете @Multipart
. Вот что я делаю:
Итак, сначала нам нужна функция для преобразования файла в MultipartBody.Part
:
public static MultipartBody.Part toMultiPartFile(String appointmentKey, File file) {
RequestBody reqFile = RequestBody.create(MediaType.parse(String.format("image/%s",
file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf(".") + 1))), file);
return MultipartBody.Part.createFormData(appointmentKey,
file.getName(),
reqFile);
}
Тогда у меня есть другая функция, которая принимает Map<String, File>
в качестве параметра для преобразования его в List<MultipartBody.Part>
:
public static List<MultipartBody.Part> toMultipartAttachments(Map<String, File> files) {
List<MultipartBody.Part> parts = new ArrayList<>();
if (files != null) {
for (Map.Entry<String, File> stringFileEntry : files.entrySet()) {
if (stringFileEntry.getValue() != null && stringFileEntry.getKey() != null) {
parts.add(toMultiPartFile(stringFileEntry.getKey(), stringFileEntry.getValue()));
}
}
}
return parts;
}
Затем вы можете просто вызвать функцию toMultipartAttachments
после вызова запроса на модификацию:
@Multipart
@POST("your api endpoint here")
function apiCall(@Part List<MultipartBody.Part> attachments)
apiCall(toMultipartAttachments(imagesMap))
Вам просто нужно поместить клавиши назначения и изображения на Map
.