Spring CommonsMultipartResolver总是为MultipartFile返回null

时间:2016-02-22 07:35:09

标签: spring multipart

如果我使用StandardServletMultipartResolver,我会正确获取文件,但如果我使用CommonsMultipartResolver,我会为文件获取null。即使没有任何其他配置,只需将new StandardServletMultipartResolver();替换为new CommonsMultipartResolver();,也不会收到文件。我想强制执行maxUploadSizePerFile,因此使用了CommonsMultipartResolver

在我的WebContext配置文件中,我有以下内容:

@Override
@Bean
public MultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    Long maxFileSize = environment.getRequiredProperty(PropertyConstants.MAX_FILE_UPLOAD_SIZE, Long.class);
    multipartResolver.setMaxUploadSizePerFile(maxFileSize);
    return multipartResolver;
}

如果我只是将CommonsMultipartResolver替换为StandardServletMultipartResolver,事情就会开始奏效。我在mvn依赖项中有commons-fileupload,应用程序启动时没有任何错误。

我正在使用Tomcat 9.0.0.M1和Spring 4.2.2。

CommonsMultipartResolver是否缺少某些配置可供使用?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但我注意到只有当CommonsFileUploadSupport将文件存储在内存中时才会发生。作为一种解决方法,我发现将maxInMemorySize设置为0即可。

<bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- max upload size in bytes -->
    <property name="maxUploadSize" value="20971520" /> <!-- 20MB -->
    <!-- max size of file in memory (in bytes) -->
    <!-- oddly, the MultipartFile passed as a RequestParam gets set to null if I allow it to use memory 
        rather than disk!  -->
    <property name="maxInMemorySize" value="0" /> 
</bean>

答案 1 :(得分:-1)

转到Servers目录并尝试在工作区项目中的Tomcat Server的context.xml中添加allowCasualMultipartParsing="true"