gpt4 book ai didi

java - FileUploadBase 上传小文件时找不到任何分段部分

转载 作者:行者123 更新时间:2023-12-04 23:00:00 27 4
gpt4 key购买 nike

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

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

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

我已将其追踪至 apache.commons.fileupload.FileItemIteratorImpl其中findNextItem()方法返回 false,尽管帖子中有多个有效部分。这导致没有 MultipartFile对象可用于我的 Controller 方法。

当我在调试器中查看 HttpServletRequest 时我看到正确的零件数(getParts() 返回正确的零件数)。

我可以只使用 HttpServletRequest ,除了对于大文件(> 1MB),会抛出关于最大文件大小的异常(我已成功为 CommonsMultipartResolver 配置,但显然没有跨越到 HttpServletRequest )。

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

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

更多

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

以下行为导致:

如果上传的文件大于 10MB,则 commons-fileupload处理它,一切都很好。

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

对于 1 MB 到 ~3.8 MB 之间的上传文件,输入流关闭,但底层连接不关闭,允许我的错误页面显示错误。

最后,如果上传的文件小于 1 MB,底层 servlet 3 实现成功处理 commons-fileupload 之前的部分。被调用,离开 commons-fileupload认为请求中没有任何部分。

最佳答案

是的,这完全是由于 Spring Boot 妨碍并试图帮助您造成的,在这种情况下会导致问题。以下是修复它的步骤:

将 CommonsMultipartResolver 配置为 bean(很可能您已经这样做了):

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

在 application.properties 文件中禁用 spring servlet 多部分处理
spring.servlet.multipart.enabled=false

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

关于java - FileUploadBase 上传小文件时找不到任何分段部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38404990/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com