在springmvc中如何使用ajax即上传文件又上传参数呢?
本文参考于
https://blog.csdn.net/chengziaa123/article/details/81041371
这里在JS中使用到了FromData
springmvc.xml配置
<!-- 配置文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置文件上传的大小 字节 -->
<property name="maxUploadSize" value="20971520"></property>
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
知识兔前台代码
function saveDraft(){
//创建一个forData
/* var formData = new FormData($('#projectinfo')[0]); */
var formData = new FormData($("#projectinfo"));//projectinfo为from的ID
//append中的两个参数分别为:第一个是HTML中的name标签,第二个是需要传递的值
formData.append("ps_file",$("#ps_file")[0].files[0]);
formData.append("ps_name",$("#ps_name").val());
formData.append("ps_goal",$("#ps_goal").val());
formData.append("ps_money",$("#ps_money").val());
formData.append("ps_days",$("#ps_days").val());
$.ajax({
type : 'POST',
url : '/Crowd-funding/projects/upload',
data : formData,
dataType:"json",
async: false,
cache : false,
processData : false,
contentType : false,
}).success(function(data) {
alert("上传成功");
}).error(function() {
alert("上传失败");
});
}
</script>
知识兔后台代码
RequestMethod.POST)
@ResponseBody
//注意:这里接收参数只能用一个个对应的name来接收,不能使用对象来接收
public boolean upload(@RequestParam("ps_file") MultipartFile ps_file, HttpServletRequest request,
@RequestParam(value="ps_name",required = false) String ps_name ,@RequestParam(value="ps_goal",required = false) String ps_goal ,@RequestParam(value="ps_money",required = false) String ps_money,@RequestParam(value="ps_days",required = false) String ps_days) {
System.out.println(ps_name+" "+ps_goal);
Map<String, String> modelMap = new HashMap<>();
boolean flay=true;
if (!ps_file.isEmpty()) {
//获取文件上传真实保存路径
String storePath = request.getServletContext().getRealPath("/images");
Random r = new Random();
String fileName = ps_file.getOriginalFilename();
String[] split = fileName.split(".jpg");
fileName = split[0] + r.nextInt(1000);
fileName = fileName + ".jpg";
System.out.println(fileName);
File filePath = new File(storePath, fileName);
System.out.println(filePath.getParentFile());
if (!filePath.getParentFile().exists()) {
filePath.getParentFile().mkdirs();// 如果目录不存在,则创建目录
}
try {
ps_file.transferTo(new File(storePath + File.separator + fileName));// 把文件写入目标文件地址
} catch (Exception e) {
e.printStackTrace();
modelMap.put("back", "error");
return flay=false;
}
modelMap.put("back", "success");
} else {
modelMap.put("back", "error");
}
return flay;
}
知识兔