java - Tomcat 文件加载
问题描述
我有一个在 Apache Tomcat 上运行的 Java Web 应用程序。应用程序上传文件。文件大小应小于 10Mb,扩展名应为例如“jpg”。
@PostMapping(value = "/register",
consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<User> register(
@RequestPart(value = "file", required = false) MultipartFile uploadFile,
@RequestPart(value = "registrationData") UserRegistrationData registrationData
) {
//If extension is wrong, the method throws WronExtensionException()
methodToValidateFileExtension(uploadFile);
}
如果不支持扩展名,我应该得到 WronExtensionException 而不检查文件大小。但我收到错误:
UT000020: Connection terminated as request was larger than 10485760
追踪:
ERROR io.undertow.request - UT005023: Exception handling request to /mycompany/auth/api/v1/register
[m java.lang.IllegalStateException: io.undertow.server.RequestTooBigException: UT000020: Connection terminated as request was larger than 10485760
at io.undertow.servlet.spec.HttpServletRequestImpl.parseFormData(HttpServletRequestImpl.java:794) ~[undertow-servlet-1.4.25.Final.jar!/:1.4.25.Final]
at io.undertow.servlet.spec.HttpServletRequestImpl.getParameter(HttpServletRequestImpl.java:665) ~[undertow-servlet-1.4.25.Final.jar!/:1.4.25.Final]
at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:194) ~[javax.servlet-api-3.1.0.jar!/:3.1.0]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:75) ~[spring-web-4.3.17.RELEASE.jar!/:4.3.17.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.17.RELEASE.jar!/:4.3.17.RELEASE]
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.25.Final.jar!/:1.4.25.Final]
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.25.Final.jar!/:1.4.25.Final]
at org.zalando.logbook.servlet.SecurityStrategy.doFilter(SecurityStrategy.java:32) ~[logbook-servlet-1.8.1.jar!/:?]
at org.zalando.logbook.servlet.LogbookFilter.doFilter(LogbookFilter.java:39) ~[logbook-servlet-1.8.1.jar!/:?]
at org.zalando.logbook.servlet.HttpFilter.doFilter(HttpFilter.java:31) ~[logbook-servlet-1.8.1.jar!/:?]
....
Caused by: io.undertow.server.RequestTooBigException: UT000020: Connection terminated as request was larger than 10485760
at io.undertow.conduits.FixedLengthStreamSourceConduit.checkMaxSize(FixedLengthStreamSourceConduit.java:168) ~[undertow-core-1.4.25.Final.jar!/:1.4.25.Final]
at io.undertow.conduits.FixedLengthStreamSourceConduit.read(FixedLengthStreamSourceConduit.java:229) ~[undertow-core-1.4.25.Final.jar!/:1.4.25.Final]
at org.xnio.conduits.ConduitStreamSourceChannel.read(ConduitStreamSourceChannel.java:127) ~[xnio-api-3.3.8.Final.jar!/:3.3.8.Final]
at io.undertow.channels.DetachableStreamSourceChannel.read(DetachableStreamSourceChannel.java:209) ~[undertow-core-1.4.25.Final.jar!/:1.4.25.Final]
at io.undertow.server.HttpServerExchange$ReadDispatchChannel.read(HttpServerExchange.java:2332) ~[undertow-core-1.4.25.Final.jar!/:1.4.25.Final]
at org.xnio.channels.Channels.readBlocking(Channels.java:294) ~[xnio-api-3.3.8.Final.jar!/:3.3.8.Final]
at io.undertow.servlet.spec.ServletInputStreamImpl.readIntoBuffer(ServletInputStreamImpl.java:192) ~[undertow-servlet-1.4.25.Final.jar!/:1.4.25.Final]
at io.undertow.servlet.spec.ServletInputStreamImpl.read(ServletInputStreamImpl.java:168) ~[undertow-servlet-1.4.25.Final.jar!/:1.4.25.Final]
at io.undertow.server.handlers.form.MultiPartParserDefinition$MultiPartUploadHandler.parseBlocking(MultiPartParserDefinition.java:213) ~[undertow-core-1.4.25.Final.jar!/:1.4.25.Final]
at io.undertow.servlet.spec.HttpServletRequestImpl.parseFormData(HttpServletRequestImpl.java:792) ~[undertow-servlet-1.4.25.Final.jar!/:1.4.25.Final]
... 47 more
更多细节 - 我不知道文件大小属性是在哪里定义的。
所以,我的问题是:
- 在methodToValidateFileExtension()启动时是否已经加载了文件?
- 我可以在加载文件之前获取文件的扩展名吗?
解决方案
推荐阅读
- java - Tomcat 问题试图强制浏览器显示客户错误句柄网页?
- java - 添加/删除列 JTable 问题
- python - 我可以在构造函数方法之外声明 Python 类字段吗?
- macos - 在 Catalina (kCGWindowName) 中启用屏幕录制 API
- node.js - 我在 ibm 云平台上查找 node.js 的 SDK 时遇到问题,它是否已弃用或重命名?
- javascript - 如何正确检查所有复选框并使用 Vue 更改状态?
- svg - 甚至可以在网格上加载/渲染 SVG 文件吗?
- html - 为什么当我将悬停与 div 一起使用时,它也会悬停在我的文本旁边?
- python-3.x - 使用 python 列表生成输出
- javascript - ReactJS:(大)子组件上的 onClick 处理程序不起作用