在项目开发中遇到的一个小小问题,上传图片 有备注信息 两个字段,修改编辑的时候。这样表单提交 file 有可能为空的情况,后端接收时候 无法判断file对象。
JSP页面文件上传
<form action="uploadBanner" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" accept="image/*" onchange="checkImage()">
<span onclick="updatePic()" style="color: blue; cursor:pointer">更换图片</span>
图片标题:
<input type="text" name="bak" id="bak" onkeyup="limitLength(value,20,'','bak')" placeholder="建议10个字以内,可不填">
</form>
checkImage()是做文件校验 图片大小 格式 等等。。。
ajax发送请求
function edit() {
var formdata=new FormData();
formdata.append("id",$('#advertiseId').val());
formdata.append('fileName', $('#filename').get(0).files[0]);
formdata.append('bak',$('#bak').val());
$.ajax({
async: false,
type: 'POST',
url: '${basePath}/manager/sys/content/editAdvertise',
dataType: 'json',
data: formdata,
contentType:false,//ajax上传图片需要添加
processData:false,//ajax上传图片需要添加
success: function (data) {
$.operate.successCallback(data);
}
})
}
解决方案:
1.使用 required = false;
@RequestMapping(value = "/editAdvertise",method = RequestMethod.POST) @ResponseBody
public AjaxResult editAdvertise(@RequestParam(value = "file",required = false) MultipartFile file,String bak,HttpServletRequest request){
if (file==null && bak.trim().equals(Objecet.getBak())){
return error("请您对图片或者标题做出修改");
}
、、、、、、
}
@RequestMapping(value = "/editAdvertise",method = RequestMethod.POST) @ResponseBody
public AjaxResult editAdvertise(String bak,HttpServletRequest request){
MultipartHttpServletRequest multipart = (MultipartHttpServletRequest)request;
MultipartFile file = multipart.getFile("file");
if (file.isEmpty()&& bak.trim().equals(Object.getBak())){
return error("请您对图片或者标题做出修改");
}
、、、、、、
}