Carga del archivo jQuery Ajax: el parámetro requerido 'MultipartFile' file 'no está presente

ANTECEDENTES

Estoy creando una aplicación web Spring MVC en Java8 y ejecutándola en tomcat8. Además de esta información, la versión Spring es4.1.6.RELEASE yServlet 3.1 Le doy los antecedentes ambientales, porque algunos solucionadores de problemas mencionaron que la versión está relacionada con este error.

MI CÓDIGO

abajo esta elroot-context.xml

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

Abajo está miFileController

@Controller
public class FileController { 
    private static final Logger logger = LoggerFactory.getLogger(FileController.class);

    private static final String UploadFolder = "Files";

    @RequestMapping("/uploadFile")
    @ResponseBody
    public void uploadFile(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws IOException {     
        String fileName = "";
        PrintWriter script = response.getWriter();

        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();

                fileName = FilenameUtils.getName(file.getOriginalFilename());

                String extension = FilenameUtils.getExtension(fileName);



                String base = System.getProperty("catalina.home");

                File dir = new File(base + File.separator + UploadFolder);                

                if (!dir.exists()) {
                    dir.mkdirs();
                }

                Date date = new Date();
                String year = DateTimeUtility.getInstance().getYear(date);
                String month = DateTimeUtility.getInstance().getMonth(date);
                String uniqueFileName = DateTimeUtility.getInstance().getDateTime(date);

                File dateDir = new File(base + File.separator + UploadFolder + File.separator + year + File.separator + month);

                if (!dateDir.exists()) {
                    dateDir.mkdirs();
                }

                File uploadedFile = new File(dateDir.getAbsolutePath() + File.separator + uniqueFileName + WordCollections.UNDERBAR +  fileName);

                BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(uploadedFile));

                stream.write(bytes);
                stream.close();

                logger.info("Server File Location = " + uploadedFile.getAbsolutePath());                  
                script.write("Uploading file was successful");
            } catch (Exception e) {             
                logger.error("Server failed to upload this file : " + fileName);
                script.write("Uploading file was failed");
            }
        } else {
            logger.error("The requested file is empty");
            script.write("Uploading file was empty");
        }
    }

Abajo está mi formulario

<form id="upload" method="POST" action="/uploadFile.json" enctype="multipart/form-data">
        File to upload: <input type="file" name="file" onchange="MyScript.uploadFile(this);"><br />
        <input type="submit" value="Upload"> Press here to upload the file!
    </form>

COSA EXTRAÑA

es que subir archivos a través deform submit no tiene problema. Funciona a las mil maravillas !! No tengo nada de qué quejarmeform submit !!

PERO ESTE AJAX ABAJO NO FUNCIONA

            $.ajax({
                type: "POST",
                url: "/uploadFile",
                data: {name: "file", file: inputElement.files[0]},
                contentType: 'multipart/form-data;boundary=----WebKitFormBoundary0XBBar2mAFEE8zbv',
                processData: false,
                cache: false,
                /*beforeSend: function(xhr, settings) {
                    xhr.setRequestHeader("Content-Type", "multipart/form-data;boundary=gc0p4Jq0M2Yt08jU534c0p");
                    settings.data = {name: "file", file: inputElement.files[0]};                    
                },*/
                success: function (result) {                        
                    if ( result.reseponseInfo == "SUCCESS" ) {

                    } else {

                    }
                },
                error: function (result) {
                    console.log(result.responseText);
                }
            });

Cuando intento cargar un archivo con la llamada ajax anterior, el servidor me muestra este error.

2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'appServlet' processing POST request for [/uploadFile]
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /uploadFile
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public void com.company.web.controller.FileController.uploadFile(org.springframework.web.multipart.MultipartFile,javax.servlet.http.HttpServletResponse) throws java.io.IOException]
2015-04-07 18:37:30 DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'fileController'
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Resolving exception from handler [public void com.company.web.controller.FileController.uploadFile(org.springframework.web.multipart.MultipartFile,javax.servlet.http.HttpServletResponse) throws java.io.IOException]: org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver - Resolving exception from handler [public void com.company.web.controller.FileController.uploadFile(org.springframework.web.multipart.MultipartFile,javax.servlet.http.HttpServletResponse) throws java.io.IOException]: org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolving exception from handler [public void com.company.web.controller.FileController.uploadFile(org.springframework.web.multipart.MultipartFile,javax.servlet.http.HttpServletResponse) throws java.io.IOException]: org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'appServlet': assuming HandlerAdapter completed request handling
2015-04-07 18:37:30 DEBUG: org.springframework.web.servlet.DispatcherServlet - Successfully completed request

Y el navegador dice algo como ...

<body><h1>HTTP Status 400 - Required MultipartFile parameter 'file' is not present</h1><div class="line"></div><p><b>type</b> Status report</p><p><b>message</b> <u>Required MultipartFile parameter 'file' is not present</u></p><p><b>description</b> <u>The request sent by the client was syntactically incorrect.</u></p><hr class="line"><h3>Apache Tomcat/8.0.20</h3></body></html>

La cuestión esEl parámetro requerido 'archivo' MultipartFile no está presente y400 Petición Incorrecta.

Busqué en Google esta palabra clave y busqué todo lo que pude, como siempre hago antes de publicar una pregunta enstackoverflow

Realmente no entiendo por qué soloajax no funciona aquí !! cuando enviar carga funciona bien.

Respuestas a la pregunta(1)

Su respuesta a la pregunta