问题发现
今天在做项目的时候,有一个用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]