У меня есть веб-приложение на Java, которое работает на Apache Tomcat.Приложение загружает файл.Размер файла должен быть менее 10 МБ, а расширение должно быть, например, «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
Stactrace:
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 () ?
- Могу ли я получитьрасширение файла перед загрузкой файла?