最近用node JS写了一个文件上传的案例,用到是ajax将文件数据传到后台,代码如下:
// 上传文件
var myfile=$("#fileInput");
$("#certainUpload").on("click",function(){
var file=myfile[0].files[0];
if(file==undefined){
alert("文件为空!!!");
}else{
//创建FormData对象
var data = new FormData();
//为FormData对象添加数据
data.append("file",file);
// 路由到/upload
$.ajax({
type:"post",
url:"/upload",
async:false,
data:data,
dataType: 'JSON',
success:function (data) {
if(data.result==1){
alert("上传成功!");
}else{
alert("上传失败");
}
},
error:function(data){
}
});
}
});
这似乎看起来没有什么错,但是上传不了文件。后来上网查了一下,加上以下三句话就可以了:
cache: false,
processData: false,
contentType: false,
- cache:有两个取值,分别问true和false,如果为true,则会读缓存,为false的话会在url后面加一个时间缀,让它跑到服务器获取结果。但是cache只有get请求才会生效。
- processData:是否序列化data,如果为true,ajax提交数据就不会序列化数据;为false,则就会将数据序列化后提交给后台。
- contentType:默认值为contentType = “application/x-www-form-urlencoded”,查看 Request headers,会发现还是有分界符,在 ajax 中 contentType 设置为 false 是为了避免 JQuery 对其操作,从而失去分界符,而使服务器不能正常解析文件。