Hi Guys,

We have started migrating our apps to 6.7.4 and have run into an issue with file uploads. We have migrated our actions to use the new ActionFileUploadInterceptor but we are seeing an issue where the upload requests are being incorrectly bypassed.

I have reduced it to a simple example which I will include at the end but the key bits are the debug logs from struts. We are seeing the request processed correctly, except for the last step where the upload is bypassed:

dispatcher.Dispatcher (Dispatcher.java:1054) - Support for multipart request is 
enabled: true
dispatcher.Dispatcher (Dispatcher.java:1072) - Validating if this is a proper 
Multipart request. Request is POST: true and ContentType matches pattern 
(^multipart/form-data(?:\s*;\s*boundary=[0-9a-zA-Z'"()+_,\-./:=?]{1,70})?(?:\s*;\s*charset=[a-zA-Z\-0-9]{3,14})?):
 true
dispatcher.Dispatcher (Dispatcher.java:1030) - Wrapping multipart request with: 
MultiPartRequestWrapper

multipart.JakartaMultiPartRequest (JakartaMultiPartRequest.java:105) - Found 
file item: [document]
multipart.JakartaMultiPartRequest (JakartaMultiPartRequest.java:116) - Item is 
a file upload

interceptor.FileUploadInterceptor (FileUploadInterceptor.java:197) - Bypassing 
/action/...
interceptor.ActionFileUploadInterceptor (ActionFileUploadInterceptor.java:139) 
- Bypassing /action/...

The struts dispatcher sees the request as being a valid Multipart POST request and and wraps it with the MultipartRequestMapper. The JakartaMultiPartRequest finds and recognises the uploaded file parameter [document] But then the two upload interceptors Bypass processing which means the withUploadedFiles method on the action is not called.

I had a look at the source for the ActionFileUploadInterceptor and the request is only bypassed if it is not an instance of MultipartRequestMapper, which according to the logs it is. I'm very confused. I setup a simple test to prove we weren't going mad.

Form is a simple form:

    <s:form action="saveStockItem" method="POST" enctype="multipart/form-data">
        <s:hidden name="item.itemId"/>
        <s:textfield name="item.name" key="stock.name"></s:textfield>
        <s:textarea name="item.description" 
key="stock.description"></s:textarea>
        <s:file name="document" key="stock.image"></s:file>
        <s:submit >upload</s:submit>
    </s:form>

The stack is the struts standard defaultStack from the core struts-default.xml

    <action name="saveStockItem" class="stockAction" method="save">
        <interceptor-ref name="defaultStack"/>
        <result name="input">/WEB-INF/pages/formStock.jsp</result>
        <result name="success" type="redirectAction">stockItems</result>
    </action>

The action class implements UploadedFilesAware and has an appropriate withUploadedFiles method.

Has anyone experienced this or is it obvious what we are missing. Any help would be appreciated.

Zoran

Reply via email to