Spring 3.0 MultipartFile upload

Konwertuję aplikację internetową Java na framework Spring i doceniam kilka porad dotyczących problemów, z jakimi borykam się podczas przesyłania plików. Oryginalny kod został napisany przy użyciu org.apache.commons.fileupload.

Czy Spring MultipartFile zawija org.apache.commons.fileupload lub mogę wykluczyć tę zależność z mojego pliku POM?

Widziałem następujący przykład:

<code>@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";
    }
}
</code>

Pierwotnie próbowałem podążać za tym przykładem, ale zawsze pojawiał się błąd, ponieważ nie mógł znaleźć tego żądania param. W moim kontrolerze wykonałem następujące czynności:

<code>@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;
}
</code>

i to działa. Jeśli ktoś powie mi, dlaczego @RequestParam nie działa dla mnie, docenię to. BTW mam

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

w moim pliku kontekstowym serwletu.

questionAnswers(6)

yourAnswerToTheQuestion