This class uses the FileUpload Streaming API to minimize the memory footprint and avoid memory consumption on large uploads.
It allows for the maximum request size check that generally was suggested to be set to -1 and be skipped. Instead, this class checks the request size itself rather than delegate to the FileUpload API, avoiding the exception that causes parameters to be lost.
Parameter information is still passed to the action layer, excluding files should the request exceed the maximum size, populates an error messages list that is passed to the action.
I configured this in my struts.xml as follows:
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakartaStream" class="com.setech.mrovelocityhub.web.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest" scope="default" />
<constant name="struts.multipart.parser" value="jakartaStream" />
<constant name="struts.multipart.bufferSize" value="10240" />
I added an additional constant called bufferSize to allow users to customize this as needed which would need to be added to StrutsConstants and removed from the attached class should this get bundled.
Please review, tweak as needed.