0
votes

I've seen a lot of answers on stackoverflow about multipart file upload problem in Spring MVC application. Step by step I've make sure that I don't repeat errors others did.

Here is my form

<form class="form-horizontal" data-toggle="validator"
                        id="track_existing_repair"
                        method="post"
                        action="/euo/testUpload.htm"
                        enctype="multipart/form-data">

...
        <div class="form-group required">
                        <label class="control-label col-sm-4" for="proofOfPurchaseInput">Select File:</label>
                        <div class="col-sm-8">
                        <input  name="proofOfPurchase" 
                            id="proofOfPurchaseInput" 
                            type="file" 
                            required/>
                    </div>
                </div>
...
</form>

In pom file I have dependency

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.2</version>
</dependency>

declared multipartResolver in app-servlet.xml

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- max upload size in bytes -->
        <property name="maxUploadSize" value="20971520" /> <!-- 20MB -->
        <!-- max size of file in memory (in bytes) -->
        <property name="maxInMemorySize" value="1048576" /> <!-- 1MB -->
</bean>

Method mapped to request in Controller class

@RequestMapping(value = {"/testUpload"},headers = "Content-Type=multipart/form-data", method = RequestMethod.POST)
public String testUpload( 
            @RequestPart(value = "proofOfPurchase", required = false) MultipartFile proofOfPurchaseFile
            ,HttpServletRequest request
            ) throws InvalidFormatException, IOException {
if(proofOfPurchaseFile !=  null){
    readFile(proofOfPurchaseFile);
}
return NAV_HOME;
}
  • I tried @RequestParam instead @RequestPart

  • Without required = false I have "Required request part 'proofOfPurchase' is not present" response, so I made it not required only to get in to examine request in debugger

So when I stop in debugger I wasn't surprised that request object shows me that file was received and even stored in jBoss temporary folder.

request object

Could you please point out what I could miss that Spring can't see uploaded file?

1

1 Answers

0
votes

The problem appears in legacy project where we also use Struts. It's turn out that struts dispatcher somehow conflicts with spring CommonsMultipartResolver.

Once I've removed all struts servlets and filters from web.xml everything start working.