Spring 3.0 MultipartFile upload

Gary picture Gary · May 10, 2012 · Viewed 16.7k times · Source

I am converting Java web application to Spring framework and appreciate some advice on the issues I am facing with the file upload. Original code was written using org.apache.commons.fileupload.

  1. Does Spring MultipartFile wraps org.apache.commons.fileupload or I can exclude this dependency from my POM file?

  2. I have seen following example:

    @RequestMapping(value = "/form", method = RequestMethod.POST)
    public String handleFormUpload(@RequestParam("file") MultipartFile file) {
    
        if (!file.isEmpty()) {
            byte[] bytes = file.getBytes();
            // store the bytes somewhere
           return "redirect:uploadSuccess";
        } else {
            return "redirect:uploadFailure";
        }
    }
    

    Originally I tried to follow this example but was always getting an error as it couldn't find this request param. So, in my controller I have done the following:

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public @ResponseBody
    ExtResponse upload(HttpServletRequest request, HttpServletResponse response)
    {
       // Create a JSON response object.
       ExtResponse extResponse = new ExtResponse();
       try {
           if (request instanceof MultipartHttpServletRequest)
           {
               MultipartHttpServletRequest multipartRequest =
                            (MultipartHttpServletRequest) request;
               MultipartFile file = multipartRequest.getFiles("file");
               InputStream input = file.getInputStream();
               // do the input processing
               extResponse.setSuccess(true);
            }
        } catch (Exception e) {
            extResponse.setSuccess(false);
            extResponse.setMessage(e.getMessage());
        }
        return extResponse;
    }
    

and it is working. If someone can tell me why @RequestParam did not work for me, I will appreciate. BTW I do have

    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="2097152"/>
    </bean>

in my servlet context file.

Answer

Surekha picture Surekha · Nov 12, 2013

I had to

  1. add commons-fileupload dependency to my pom,
  2. add multipartResolver bean (mentioned in the question),
  3. use @RequestParam("file") MultipartFile file in the handleFormUpload method and
  4. add enctype in my jsp : <form:form method="POST" action="/form" enctype="multipart/form-data" >

to get it to work.