当我在Spring Boot应用程序中使用CommonsMultipartResolver时,MultipartFile为null

f.u*_*.u. 4 spring file-upload spring-boot

我想在我的Spring Boot应用程序中实现上传处理程序方法.我想用CommonsMultipartResolver而不是StandardServletMultipartResolver.我有以下问题:

我的控制器方法参数(文件)始终设置为null.我在java文档中看到HiddenHttpMethodFilter: 由于需要检查POST body参数,因此在多部分POST请求的情况下,此过滤器需要在多部分处理之后运行.

我试图为multipartFilter bean设置顺序,但它没有帮助.当我调试时,我发现HiddenHttpMethodFilter之前总是调用它MultipartFilter.我使用的是Spring Boot 1.3.0.RELEASE和基于Java的配置.如何设置的顺序 HiddenHttpMethodFilter来之后MultipartFilter

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();        
    resolver.setMaxUploadSizePerFile(52428800); 
    return resolver;
}

@Bean
@Order(0)
public MultipartFilter multipartFilter() {
        MultipartFilter multipartFilter = new MultipartFilter();
    multipartFilter.setMultipartResolverBeanName("multipartResolver");
    return multipartFilter;
}

@RequestMapping(value = "/{userId}", method = RequestMethod.POST)
@ResponseBody
public FileTransport create(@PathVariable("userId") Long userId,
        MultipartFile file) throws IOException {
    //return fileService.create(userId, file);
    return new FileTransport();
}
Run Code Online (Sandbox Code Playgroud)

如果我修改方法以包括如下所示的请求参数:

@RequestParam(name ="file",required = true)MultipartFile文件

它抛出一个异常:'必需的MultipartFile参数'文件'不存在'.

如果我使用StandardServletMultipartResolver,一切都按预期工作.

Ale*_*der 7

在Spring Boot中使用CommonsMultipartResolver,您需要通过在配置中添加以下注释来禁用MultipartAutoConfiguration:

@EnableAutoConfiguration(exclude={MultipartAutoConfiguration.class}
Run Code Online (Sandbox Code Playgroud)

我的多部分解析器bean:

 @Bean
 public MultipartResolver multipartResolver() {
     CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
     multipartResolver.setMaxUploadSize(5 * 1024 * 1024);
     return multipartResolver;
 }
Run Code Online (Sandbox Code Playgroud)