Я выполняю рефакторинг некоторого устаревшего кода, используемого для загрузки файлов с использованием Commons Fileupload и JSP, для использования Spring Controllers.Учитывая, что большая часть кода для загрузки файлов основана на Commons Fileupload, я хочу использовать этот код повторно.Была предпринята первая попытка прямого перемещения кода из JSP в Spring Controller, например:
@RequestMapping(path = { "/my/file/upload/request/mapping" })
public ModelAndView myControllerMethod(HttpServletRequest request, HttpServletResponse response){
List<FileItem> items = null;
if (ServletFileUpload.isMultipartContent(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
items = upload.parseRequest(request);
System.out.println("number of items: " + (items != null ? items.size() : "null"));
}
...
Хотя программа вводит if
, распознавая его как составной запрос, это всегда показывает number of items: 0
.
Я включил MultipartViewResolver
, например:
@Configuration
@EnableWebMvc
@SuppressWarnings("deprecation")
public class WebMvcConfiguration extends WebMvcConfigurerAdapter{
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(maxFileUploadSizeBytes);
return multipartResolver;
}
, но результат одинаков с или без него.
Как указано во многих местах (например, здесь (Baeldung) и здесь (SO) ), кажется, что Commons Fileupload не может прочитать составную часть, потому что она уже была прочитана Spring.Таким образом, решение состоит в том, чтобы отключить поддержку Spring multipart.Во многих постах рассказывается, как это сделать для Spring Boot, но я понятия не имею, как это сделать для raw Spring 5 .Есть идеи о том, как это сделать?
Примечание : Я также пытался получить составные файлы, используя Spring , например:
@RequestMapping(path = { "/my/file/upload/request/mapping" })
public ModelAndView myControllerMethod(@RequestParam MultipartFile file){
и даже @RequestParam MultipartFile[] files
, но я получаю пустые файлы или массив пустых файлов соответственно.Опять же, я проверил с помощью консоли Firefox, что выполняемый запрос точно такой же, как и со старым кодом JSP, который работал, , поэтому проблема не в том, что выполняемый запрос .