发现MultipartHttpServletRequest是不能用在post请求的,但是我这里又有很多的数据要传到后台保存,鱼和熊掌必须要兼得,请教了下解决办法有,就是数据和图片用ajax分开保存。下面是操作
HTML部分:
<div class="col-md-6 form-group">
<div class="col-md-12">
<input type="hidden" name="imgUrl" id="imgUrl"/>
<input type="file" name="logoFile" id="logoFile" multiple="multiple" accept="i image/x-png, image/jpeg, image/gif " onchange="setImg(this);" > //使用onchange事件做上传图片操作
</div>
<span><img id="imgShow" src="" width="150" height="150"/></span>
</div>
JS部分:
function setImg(obj) {//用于进行图片上传,返回地址
var f = $(obj).val();
console.log(f);
if (f == null || f == undefined || f == '') {
return false;
}
if (!/\.(?:png|jpg|bmp|gif|PNG|JPG|BMP|GIF)$/.test(f)) {
alert("类型必须是图片(.png|jpg|bmp|gif|PNG|JPG|BMP|GIF)");
$(obj).val('');
return false;
}
var data = new FormData();
$.each($(obj)[0].files, function (i, file) {
console.log(file);
data.append('file', file);
});
$.ajax({
type: "POST",
url: "/GoodsMaintain/uploadPicture",
data: data,
cache: false,
contentType: false, //不可缺
processData: false, //不可缺
dataType: "json",
success: function (data) {
if (data.errMsg == "SUCCESS") {
$("#imgUrl").val(data.imgUrl);//将地址存储好
$("#imgShow").attr("src", rootPath + "itemsImg\\" + data.imgShow);//显示图片
} else {
alert("上传失败");
$("#url").val("");
$(obj).val('');
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("上传失败,请检查网络后重试");
$("#url").val("");
$(obj).val('');
}
});
}
同时在控制层重新写一个接收图片的方法
@ResponseBody
@RequestMapping("/saveRecordYy1")
public Map saveRecordYy1(HttpServletRequest request, HttpServletResponse response) throws IOException {
String yyFileName1 = "";
Map<String, Object> reMap = new HashMap<String, Object>();
MultipartHttpServletRequest request1 = (MultipartHttpServletRequest)request;//判断是否有文件
MultiValueMap<String, MultipartFile> multiFileMap = request1.getMultiFileMap();
Collection<List<MultipartFile>> values = multiFileMap.values();
if(values.size()>0){
for (List<MultipartFile> files:values) {
try{
for (MultipartFile file:files) {
yyFileName1 = file.getOriginalFilename();
}
Map map = new HashMap();
map.put("name", yyFileName1);
reMap.put("status", "200");
reMap.put("result", map);
reMap.put("error", "");
}catch (Exception e){
e.printStackTrace();
reMap.put("status", "202");
reMap.put("error", "失败");
reMap.put("result", "");
}
}
}else {
reMap.put("status", "203");
reMap.put("error", "文件为空");
reMap.put("result", "");
}
return reMap;
}
或者这样写
@ResponseBody
@RequestMapping("/saveRecordYy1")
public Object saveRecordYy1(HttpServletRequest request, HttpServletResponse response) throws IOException {
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request
MultipartFile multipartFile = multipartHttpServletRequest.getFile("file");
String imgName = multipartFile.getOriginalFilename();
// println("imgName---->" + imgName)
String img = Base64Img.GetImageInputStream(multipartFile.inputStream);
// println("img---->" + img)"/itemsImg/"
String imgPath = request.getSession().getServletContext().getRealPath("/") + "itemsImg\\";
// println("imgPath---->" + imgPath)
Boolean success = Base64Img.GenerateImage(img, imgPath, imgName);//图片是否添加成功
JSONObject jsonResult = new JSONObject()
String errMsg = "false"
if (success) {
jsonResult.put("imgUrl", imgPath + imgName);
jsonResult.put("imgShow", imgName);
errMsg = "SUCCESS"
}
jsonResult.put("errMsg", errMsg)
render jsonResult;
}