【发布时间】:2016-08-17 14:14:45
【问题描述】:
我正在尝试在我的 Spring Boot 应用程序中使用 CommonsMultipartResolver。我不能使用StandardServletMultipartResolver,因为我想处理异常(例如超过文件大小)。
我已经建立了对commons-fileupload 的依赖。我的弹簧配置是:
@Autowired
private MultipartProperties multipartProperties = new MultipartProperties();
@Bean
public MultipartConfigElement multipartConfigElement() {
return this.multipartProperties.createMultipartConfig();
}
@Bean
public MultipartResolver multipartResolver() {
LOG.debug("initializing MultipartResolver");
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
return multipartResolver;
}
@Bean
public FilterRegistrationBean multipartFilterRegistrationBean() {
final MultipartFilter multipartFilter = new MultipartFilter();
final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(multipartFilter);
multipartFilter.setMultipartResolverBeanName("multipartResolver");
filterRegistrationBean.setOrder(OrderedHiddenHttpMethodFilter.DEFAULT_ORDER-1);
return filterRegistrationBean;
}
当我将MultipartFilter 设置为在HiddenHttpMethodFilter 之前执行时,我得到一个IOException:
Caused by: java.io.IOException: Missing content for multipart request
at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:491)
at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:400)
at org.eclipse.jetty.server.Request.getParts(Request.java:2139)
at org.eclipse.jetty.server.Request.extractMultipartParameters(Request.java:385)
... 35 common frames omitted
否则,我得到一个异常,即请求中不存在 part 参数。
我认为我需要禁用 servlet 3.0 处理多部分请求,但我不知道如何在 Spring Boot 中执行此操作。
【问题讨论】:
-
从堆栈跟踪来看,您似乎正在使用您在任何地方都没有提到的 Jetty。为避免任何其他差异,您能否提供一个重现问题的最小示例?
标签: spring spring-boot multipartform-data servlet-3.0 apache-commons-fileupload