我想在我的Spring Boot应用程序中实现上传处理程序方法。我想使用CommonsMultipartResolver
而不是StandardServletMultipartResolver
。我有以下问题:当我在Spring Boot应用程序中使用CommonsMultipartResolver时,MultipartFile为null
我的控制器方法参数(文件)始终设置为空。我在HiddenHttpMethodFilter
的java文档中看到: 由于其内部需要检查POST主体参数,所以此过滤器在多部分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();
}
如果我修改的方法,包括像下面请PARAM:
@RequestParam(NAME = “文件”,要求= TRUE)MultipartFile文件
它抛出一个异常:“必MultipartFile参数'文件'不存在'。
如果我使用StandardServletMultipartResolver
,一切都按预期工作。
正如[在GitHub上讨论](https://github.com/spring-projects/spring-boot/issues/2958#issuecomment-227536841),您的'MultipartFilter'的顺序是错误的。它需要小于-10000的'HiddenHttpMethodFilter'的顺序。如果这没有帮助,你能提供一个[最小,完整,可验证的例子](http://stackoverflow.com/help/mcve)? –
@AndyWilkinson HiddenHttpMethodFilter的顺序不是-10000,而是HIGHEST_PRECEDENCE + 10。但是,即使你将MultipartFilter设置为超前,上传失败,这次使用'java.io.IOException:缺少多部分请求的内容 \t at org.eclipse.jetty.server.Request.extractMultipartParameters(Request.java:390 )'。 CommonsMultipartResolver是否与Spring Boot兼容? – kpentchev
@AndyWilkinson弹簧启动版本是1.2.8。 – kpentchev