问题发现

今天在做项目的时候,有一个用ajax文件上传的需求。后端配置好了之后,用前端发送过去一直报这个错

org.springframework.web.multipart.MultipartException: Current request is not a multipart request

网上找了一下,这个错误是因为前端传过去的请求的头不是multipart 类型。把ajax的contentType设置为false就会自动设置类型了。

function sendImage(){
            var formData = new FormData();
            formData.append("file",$("#file")[0].files[0]);
            $.ajax({
                url: '/sendImage',
                type: 'POST',
                data: formData,
                enctype: 'multipart/form-data',
                processData: false,
                contentType: false,
                success: function (msg) {
                    alert(msg);
                }
            });
        }

后来发现这么写之后后端还是报这个错,去浏览器看一看contentType的值。

Content-Type: false

并没有像网上说的那样会自动转换contentType的类型。

试错

后来想是不是可以把它设置为undefined

Content-Type: application/x-www-form-urlencoded

额,转换成了ajax默认的Content-Type类型

那我手动设置contentType类型为multipart/form-data呢,这次后端又报这个错

the request was rejected because no multipart boundary was found

这个错的原因是因为手动设置的multipart/form-data没有boundary边界,必须得要自动设置的multipart/form-data。问题到这里似乎已经进入了死循环,于是去github上找了个示例项目,发现写法和我没有什么不同,就是jQuery版本和我不一样,它用的是jquery-1.11.2.min.js,而我用的是jquery-1.4.2.min.js。

问题解决

[scode type=“green”]把jquery版本换成jquery-1.11.2.min.js就解决了[/scode]

Q.E.D.