在spring中,当一个请求发送了文件、图片、普通信息时,我们如何处理?
实例代码如下(仅供参考):
public static Map<String, Map<String, String>> upload(HttpServletRequest request) throws IllegalStateException, IOException{
//存储本次传递的有关文件的信息
Map<String, String> mapFile = new HashMap<String, String>();
//存储本次传递的有关图片的信息
Map<String, String> mapImg = new HashMap<String, String>();
//存储本次传递的有关参数的信息
Map<String, String> mapParam = new HashMap<String, String>();
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request)){
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//获取multiRequest 中所有的文件名
Iterator<String> iterF = multiRequest.getFileNames();
Enumeration<String> iterP = multiRequest.getParameterNames();
//循环获取多媒体信息(包括文件和图片)
while(iterF.hasNext()){
//一次遍历所有文件
MultipartFile file=multiRequest.getFile(iterF.next().toString());
String name = file.getName();
String str = file.getContentType();
String path;
if(file!=null){
//判断是文件还是图片
if(str.split("/")[0].equals("image")){
//拼接图片保存路径
path = ConstantManager.IMGURL + file.getOriginalFilename();
mapImg.put(name, path);
}else{
//拼接文件保存路径
path = ConstantManager.FILEURL + file.getOriginalFilename();
mapFile.put(name, path);
}
//上传
file.transferTo(new File(path));
}
}
//循环获取普通参数信息
while(iterP.hasMoreElements()){
//获取每一个参数名称
String paramName = iterP.nextElement();
//获取参数对应的值
String paramValue = multiRequest.getParameter(paramName);
mapParam.put(paramName, paramValue);
}
}
Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
map.put("file", mapFile);
map.put("param", mapParam);
map.put("img", mapImg);
return map;
}