FileUploadBase在上传小文件时找不到任何多部分

时间:2016-07-15 21:04:14

标签: java spring servlets file-upload

我正在使用Spring的CommonsMultipartResolver来处理servlet 3环境中的文件上传。

如果上传的文件很大,一切正常。

如果上传的文件较小,则解析程序无法发现任何部分(不会抛出异常)。

尽管帖子中有多个有效部分,但我已将apache.commons.fileupload.FileItemIteratorImpl方法返回到findNextItem()跟踪到MultipartFile。这导致我的控制器方法无法使用HttpServletRequest对象。

当我在getParts()查看调试器时,我看到正确的部件数量(HttpServletRequest会返回正确数量的部件)。

我可以使用CommonsMultipartResolver,但对于大文件(> 1MB),会抛出有关最大文件大小的异常(我已成功为HttpServletRequest配置但显然是不要越过commons-fileupload)。

我查看了尝试配置Servlet 3的最大文件大小,但我不想在我的应用程序中添加几个新类来设置该大小。

有没有办法使用Servlet 3和commons-fileupload上传较小的文件?

更多

我已将maxUploadSizePerFile配置为commons-fileupload = 100MB。

以下行为导致:

如果上传的文件是> 10MB,然后commons-fileupload处理它,一切都很好。

如果上传的文件介于~3.8 MB和10 MB之间,则在commons-fileupload有机会解析导致浏览器中的连接重置消息的请求之前,输入流和底层连接都将关闭。 / p>

对于介于1 MB和~3.8 MB之间的上传文件,输入流将关闭,但不会关闭基础连接,从而允许我的错误页面显示错误。

最后,如果上传的文件小于1 MB,则基础servlet 3实现会在commons-fileupload被调用之前成功处理部分,使Any(result => result > 1)认为请求中没有部分。

2 个答案:

答案 0 :(得分:0)

使用Spring Boot导致此行为(以前我不知道)会自动为Servlet 3配置多部分。这会导致基础JREHttpServletRequest有机会之前处理文件上载它

在这一点上我唯一感到好奇的是,如果上传的文件足够大,它就不会失败。

答案 1 :(得分:0)

是的,这完全是由于弹簧靴跳跳并试图帮助您而造成的,在这种情况下会引起问题。以下是修复此问题的步骤:

将CommonsMultipartResolver配置为一个Bean(很有可能已经做到了):

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    return multipartResolver;
}

在application.properties文件中禁用spring servlet的多部分处理

spring.servlet.multipart.enabled=false

然后以极大的热情欢欣鼓舞。