前端部分
//可使用FormData 携带file进行上传
var formdata = new FormData();
var imageInfos = [];
//上传多
$.each($(".myupload"),function(n,item){
var file = $(uploadFile).get(0).files[0];
//只上传图片
if (file.type.match("image.*")) {
formdata.append("file"+n, file);
//携带 图片的一些额外信息
var imageInfo = {"sort":n, "link":link, "product":product};
imageInfos.push(imageInfo);
}
});
//使用JSON.stringify 转成JSON字符串,否则后端接收的是[object Object]
formdata.append("imageInfos", JSON.stringify(imageInfos));
然后使用ajax 请求,不废话了!
后端部分
Controller层
@ResponseBody
@RequestMapping(value="operdesigncarousel.htm", method=RequestMethod.POST)
public Map<String, Object> uploadDemo(HttpServletRequest request,HttpServletResponse response) {
Map<String, Object> paraMap = requestUtil.getParaMap(request);
Map<String, Object> resultMap = new HashMap<String, Object>();
Map<String, Object> saveFile = FileUploadUtil
.multipartUpload(request, "\\ecommerce\\design");
int ret = Integer.parseInt(saveFile.get("ret").toString());
if(ret > 0) {
return service.add(paraMap);
}
resultMap.put("ret", -1);
resultMap.put("desc", saveFile.get("desc"));
return resultMap;
}
Tomcat 配置虚拟路径
在D:\apache-tomcat-8.5.5\conf\Catalina\localhost新建一个 名和path相同的xml文件如:
一个基于spring 的 fileupload 工具
/**
* TODO<br/>
* @param request
* @param savePath 例如:根目录(D:\apache-tomcat-8.5.5\webapps\erp-crm) + 保存目录(\crm\mall\design) + 文件名 (demo.png)
* @param isSaveInProject true 保存在webapp 项目下, 重新部署会清空, false 根目录为对应tomcat目录
* @param isNewFileName true 生成新文件名 格式为 yyyyMMddHHmmss(0++ 防止多上传同名).suffix
* @return Map 包含 ret -1 失败; desc 描述; pathList 文件url列表
*/
public static Map<String, Object> multipartUpload(HttpServletRequest request,
String savePath, boolean isSaveInProject, boolean isNewFileName) {
MultipartHttpServletRequest mulRequest = (MultipartHttpServletRequest) request;
Map<String, Object> result = new HashMap<String, Object>();
List<String> pathList = new ArrayList();
StringBuilder builder = new StringBuilder();
Map<String, MultipartFile> fileMap = mulRequest.getFileMap();
//null 判断
if(fileMap == null || fileMap.isEmpty()) {
result.put("ret", "-1");
result.put("desc", "上传文件不存在");
return result;
}
//项目路径 webapp 下,重新部署会清空
String projectPath = mulRequest.getSession().getServletContext().getRealPath("/");
String dirPath = System.getProperty("catalina.home");
//循环fileMap
int count = 0;
for(String key : fileMap.keySet()){
MultipartFile file = fileMap.get(key);
String filename = file.getOriginalFilename();
//判断是否存在webapp 项目下
if(isSaveInProject){
dirPath = projectPath;
}
//目录不存在,创建
File dirPathFile = new File(dirPath+savePath);
if (!dirPathFile.exists()) {
dirPathFile.mkdirs();
}
//判断是否生成新文件名
if(isNewFileName){
filename = getNewFileName(filename, count);
count++;
}
String filePath = savePath + File.separatorChar + filename;
File saveFile = new File(dirPath+ File.separatorChar +filePath);
try {
file.transferTo(saveFile);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
builder.append(filePath).append("&");
pathList.add(filePath);
}
builder.deleteCharAt(builder.length()-1);
result.put("filePath", builder.toString());
result.put("pathList", pathList);
result.put("ret", 1);
result.put("desc", "上传成功");
return result;
}