Я использую Reaction-Dropzone для массовой загрузки изображений в мой бэкэнд. В документации сказано, что функция onChange возвращает массив файлов. Я сохраняю этот массив файлов в свой объект состояния.
https://www.npmjs.com/package/material-ui-dropzone
Объект, который я передаю, имеет вид
this.state = {
title: '',
description: '',
pictures: []
};
Мой вызов извлечения на мой бэкэнд выглядит так
createProject = () => {
let formData = new FormData();
formData.append('title', this.state.title);
formData.append('description', this.state.description);
formData.append('pictures', this.state.pictures);
fetch("http://localhost:5000/api/project/uploadProject",
{
mode: 'no-cors',
method: "POST",
body: formData
}).then(function (res) {
if (res.ok) {
alert("Perfect! ");
} else if (res.status == 401) {
alert("Oops! ");
}
}, function (e) {
alert("Error submitting form!");
});
}
Конечная точка моего бэкэнда, построенного на Spring, имеет вид
@RequestMapping(path = "/uploadProject", method = RequestMethod.POST,
consumes = {"multipart/form-data"})
public void uploadFile( @ModelAttribute ProjectRequest projectRequest) {
И, наконец, моя модель ProjectRequest выглядит как
public class ProjectRequest {
@NotBlank
@Size(max = 140)
private String title;
@NotBlank
private String description;
@Size(max = 4)
private List<MultipartFile> pictures;
Когда я запускаю вызов fetch, я продолжаю получать эту ошибку от Spring, говоря, что я передаю массив строк, и он не может быть преобразован в массив MultipartFile
Исправлено [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 ошибка
Ошибка поля в объекте 'projectRequest' на поле 'pictures': отклоненное значение []; коды [typeMismatch.projectRequest.pictures, typeMismatch.pictures, typeMismatch.java.util.List, typeMismatch]; аргументы [org.springframework.context.support.DefaultMessageSourceResolvable: codes [projectRequest.pictures, pictures]; аргументы []; сообщение по умолчанию [картинки]]; сообщение по умолчанию [Не удалось преобразовать значение свойства типа 'java.lang.String' в требуемый тип 'java.util.List' для свойства 'pictures'; Вложенное исключение: java.lang.IllegalStateException: невозможно преобразовать значение типа «java.lang.String» в требуемый тип «org.springframework.web.multipart.MultipartFile» для изображений свойств [0]: нет подходящих редакторов или стратегии преобразования найден]]
Я попытался жестко закодировать массив строк в поле рисунков и настроить список изображений модели projectRequest так, чтобы он принимал список строк, чтобы проверить, правильно ли я написал конечную точку бэкэнда, но это проходит нормально. По какой-то причине он не работает, только когда у меня есть массив файлов в параметре pictures.
Кто-нибудь знает, почему эта ошибка повторяется?
UPDATE:
Таким образом, я нашел точную проблему, которую я имею по этой ссылке
Объект файла становится строкой, когда помещается в массив? JS
Кто-нибудь знает, как можно обойтись массивом строк [объектный файл]?