[ 
https://issues.apache.org/jira/browse/WW-5506?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18015986#comment-18015986
 ] 

Ricky commented on WW-5506:
---------------------------

I can confirm, multipart loading has been revised starting with *Tomcat 11.0.8*

This is the relevant change in Tomcat source code, in the _else_ statement:

Before:
{code:java}
if (context.getAllowCasualMultipartParsing()) {
    mce = new MultipartConfigElement(null, connector.getMaxPostSize(), 
connector.getMaxPostSize(),
            connector.getMaxPostSize());
} else {
    partsParseException = new 
IllegalStateException(sm.getString("coyoteRequest.noMultipartConfig"));
    return;
}{code}
After:
{code:java}
if (context.getAllowCasualMultipartParsing()) {
    mce = new MultipartConfigElement(null, connector.getMaxPostSize(), 
connector.getMaxPostSize(),
            connector.getMaxPostSize());
} else {
    if (explicit) {
        partsParseException = new 
IllegalStateException(sm.getString("coyoteRequest.noMultipartConfig"));
    } else {
        parts = Collections.emptyList();
    }
    return;
}{code}
When a "multipart/form-data" content is sent, the new _explicit_ flag passed to 
the function is set to {_}false{_}, so an exception is no longer thrown, 
instead an empty parts collection is returned as it was in Tomcat 10.

 

So, {*}use Tomcat version >= 11.0.8 to get upload working{*}.

 

> File upload not working with Tomcat 11
> --------------------------------------
>
>                 Key: WW-5506
>                 URL: https://issues.apache.org/jira/browse/WW-5506
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Dispatch Filter
>    Affects Versions: 7.0.0
>         Environment: Tomcat 11.0.2
> WebApp based on Struts 7.0.0
>            Reporter: Ricky
>            Assignee: Lukasz Lenart
>            Priority: Major
>             Fix For: 7.1.0
>
>
> The method 
> Dispatcher.{color:#000000}{color:#000000}createContextMap{color}{color} 
> doesn't support Tomcat 11 new behaviour.
> Until Tomcat 10 the method Request.getParameterMap returned empty parts when 
> multipart/form-data was posted. Now it throws an IllegalStateException.
> The exception rises al line:
> {color:#000000}{color:#000000}HttpParameters 
> {color}{color:#6a3e3e}params{color}{color:#000000} = 
> HttpParameters.{color}{color:#000000}create{color}{color:#000000}({color}{color:#6a3e3e}request{color}{color:#000000}.getParameterMap()).build();{color}{color}
> Exception stack follows:
> {noformat}
>     java.lang.IllegalStateException: Unable to process parts as no multi-part 
> configuration has been provided
>         at org.apache.catalina.connector.Request.parseParts(Request.java:2427)
>         at 
> org.apache.catalina.connector.Request.doParseParameters(Request.java:2799)
>         at 
> org.apache.catalina.connector.Request.parseParameters(Request.java:2755)
>         at 
> org.apache.catalina.connector.Request.getParameterNames(Request.java:1071)
>         at 
> org.apache.catalina.connector.Request.getParameterMap(Request.java:1056)
>         at 
> org.apache.catalina.connector.RequestFacade.getParameterMap(RequestFacade.java:173)
>         at 
> org.apache.struts2.dispatcher.Dispatcher.createContextMap(Dispatcher.java:807)
>         at 
> org.apache.struts2.dispatcher.PrepareOperations.createActionContext(PrepareOperations.java:103)
>         at 
> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.handleRequest(StrutsPrepareAndExecuteFilter.java:143)
>         at 
> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.tryHandleRequest(StrutsPrepareAndExecuteFilter.java:137)
>         at 
> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:125)
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:109)
>         at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
>         at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:79)
>         at 
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
>         at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
>         at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
>         at 
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:663)
>         at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
>         at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
>         at 
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:395)
>         at 
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
>         at 
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
>         at 
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1746)
>         at 
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
>         at 
> org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1148)
>         at 
> org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
>         at 
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
>         at java.base/java.lang.Thread.run(Thread.java:1583){noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to