Я борюсь с загрузкой файлов Multipart в контроллере Spring. Я прочитал несколько вопросов, погуглил, но, похоже, ничего не работает.
я получил
error: "Bad Request"
exception: "org.springframework.web.multipart.support.MissingServletRequestPartException"
message: "Required request part 'file' is not present"
Мой контроллер BE:
@RequestMapping(value = "/zip", method = RequestMethod.POST)
public void readFile(@RequestParam("file") MultipartFile file) throws IOException {
// code
}
FE, angularJS:
service.getZip = function getZip(file) {
var formData = new FormData();
formData.append('file', file);
return $http({
method: 'POST',
url: CONSTANTS.readFile,
data: formData,
headers: {'Content-Type': undefined}
}) .then(function (response) {
var data = response.data;
return data.id;
});
}
HTML:
<input type = "file" id = "file" name = "file" accept = ".txt"/>
также application.properties содержат:
spring.http.multipart.enabled=false
Обновлено:
Я больше не получаю эту ошибку, когда следую совету @ Byeon0gam по удалению @RequestParam с моего контроллера, но мой файл имеет значение null, поскольку это касается контроллера. Хотя в сервисе FE, как я вижу, не пусто:
Я хочу и то, и другое - загрузить файл от клиента и сразу же вернуть ответ, состоящий из файлов, сгенерированных из загруженного файла.
Я не знаю angularJS, поэтому не знаю, какой запрос генерируется из этого кода. НО: вы можете создать стандартную HTML-форму с помощью кнопки ОТПРАВИТЬ. Контроллеры Spring без проблем работают с загрузкой файлов HTML. Итак, если это сработает, запустите консоль разработчика и проверьте точный запрос запроса, который отправляется, когда вы нажимаете кнопку отправки. Затем поиграйте с кодом JS, пока он не создаст точно такой же запрос.
добавьте в форму этот enctype = "multipart / form-data".




измените Content-Type в вашем FE на:
headers: {'Content-Type': 'x-www-form-urlencoded'}
надеюсь, это сработает для вас.
то я получаю ошибку message: "Current request is not a multipart request"
попробуйте добавить enctype = 'multipart / form-data' в $ http
он все еще говорит message: "Current request is not a multipart request"
Попробуйте удалить строку content-type в $ http.
еще "Current request is not a multipart request". Похоже на магию
Вы уверены, что не смешиваете логику загрузки и выгрузки? У вас есть сопоставление Post с методом
readFile. Вы также используетеurl: CONSTANTS.readFile. Вы хотите загрузить файл с клиента на сервер или загрузить файл с сервера на клиент?