Ajax
$("#useradd").click(function(){
var userCode = $("#userCode").val();
var userName = $("#userName").val();
var userPassword = $("#userPassword").val();
var birthday = $("#birthday").val();
var fad = new FormData();
fad.append("attch", $("#attch")[0].files[0]);
fad.append("userCode",userCode);
fad.append("userName",userName);
fad.append("userPassword",userPassword);
fad.append("birthday",birthday);
$.ajax({
url: "http://localhost:8080/save",
type: "post",
dataType: "text",
data: fad,
cache: false,
processData: false,
contentType: false,
success: function(rs){
if(result=="1"){
alert("保存成功!")
}else{
alert("保存失败");
}
},
error: function(){
alert("服务器内部错误");
}
});
});
Controller
//增加
@RequestMapping(value="/save",method=RequestMethod.POST)
public Object save(
HttpSession session,
HttpServletRequest request,
@RequestParam("userCode") String userCode,
@RequestParam("userName") String userName,
@RequestParam("userPassword") String userPassword,
@RequestParam("birthday") String brithday,
@RequestParam("attch") MultipartFile attch){
System.out.print("1231231");
//单文件上传
boolean lay = false;
String idPicPath="";
String logoLocPath="";
String filesError="";
String randomName="";
if(!attch.isEmpty()){
String path=request.getSession().getServletContext().getRealPath("statics"+File.separator+"uploadfiles");//文件的路径
String fileName=attch.getOriginalFilename(); //文件的名称
String prefix=FilenameUtils.getExtension(fileName);//截取文件的后缀
int fileSize=500000; //500kB
if(attch.getSize()>fileSize){
filesError="文件过大,最大500KB";
lay = false;
}else if(prefix.equalsIgnoreCase("jpg") ||
prefix.equalsIgnoreCase("jpeg")||
prefix.equalsIgnoreCase("gif")||
prefix.equalsIgnoreCase("bmp")){
randomName=System.currentTimeMillis()/*+Rando.nextInt(10000)*/+session.getId().substring(0,10)+fileName;
File tagerFile=new File(path,randomName);
lay =true;
if(!tagerFile.exists()){
tagerFile.mkdirs();
}
try {
attch.transferTo(tagerFile);
} catch (Exception e) {
filesError="上传文件失败!";
lay = false;
}
}else{
filesError="文件格式不正确!必须是:jpg jpeg bmp gif";
lay = false;
}
session.setAttribute("filesError", filesError);
idPicPath=randomName;
logoLocPath=path+File.separator+randomName;
}
User user= new User();
user.setUserCode(userCode);
user.setUserPassword(userPassword);
SimpleDateFormat mat = new SimpleDateFormat("yyyy-MM-dd");
try {
user.setBirthday(mat.parse(brithday));
} catch (ParseException e) {
e.printStackTrace();
}
user.setUserName(userName);
user.setIdPicPath(idPicPath);
int add = userService.save(user);
return JSON.toJSONString(add);
}
Ajax属性:cache、processData、contentType
① cache:缓存
当发起一次请求后,会把获得的结果以缓存的形式进行存储,当再次发起请求时,如果 cache 的值是 true ,那么会直接从缓存中读取,而不是再次发起一个请求了。
从 cache 的工作原理可以得出,cache 的作用一般只在 get 请求中使用。
② processData:处理数据
默认情况下,processData 的值是 true,其代表以对象的形式上传的数据都会被转换为字符串的形式上传。而当上传文件的时候,则不需要把其转换为字符串,因此要改成false
③ contentType:发送数据的格式
和 contentType 有个类似的属性是 dataType , 代表的是期望从后端收到的数据的格式,一般会有 json 、text……等
而 contentType 则是与 dataType 相对应的,其代表的是 前端发送数据的格式
默认值:application/x-www-form-urlencoded
代表的是 ajax 的 data 是以字符串的形式 如 id=2019&password=123456
使用这种传数据的格式,无法传输复杂的数据,比如多维数组、文件等
有时候要注意,自己所传输的数据格式和ajax的contentType格式是否一致,如果不一致就要想办法对数据进行转换
把contentType 改成 false 就会改掉之前默认的数据格式,在上传文件时就不会报错了。