Spring mvc 上传多个文件问题:
1、文件上传中from必须指定enctype="multipart/form-data",如:<formid="formImport"class="form-horizontal"enctype="multipart/form-data">
页面上传的Request payload:
------WebKitFormBoundary5LvjgAmqutDyQEjpContent-Disposition: form-data; name="file"; filename="模板.xls"
1、用request.gerParameter("modelId")无法获取页面传入的参数,获取为null。
CommonsMultipartResolver multipartResolver= new CommonsMultipartResolver(request.getServletContext()); MultipartHttpServletRequest multipartHttpServletRequest = multipartResolver.resolveMultipart(request); String modelTypeString = multipartHttpServletRequest.getParameter("modelType").trim();2、获取多个文件:
页面的jsp为:
<div class="fileupload-btn"> <span class="btn default btn-file"> <span class="fileupload-new">浏览</span> <span class="fileupload-exists">更改</span> <input name="file1" type="file" isFile="pic" class="default" /> </span> <span class="btn default btn-eraser fileupload-exists" data-dismiss="fileupload">清除</span> </div>
<input name="file2" type="file" isFile="pic" class="default" />
<input name="file3" type="file" isFile="pic" class="default" />spring mvc获取多个文件:
spring -mvc-servlet.xml配置:
<!-- 支持上传文件 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"/> <property name="maxUploadSize" value="1073741824"/> <property name="maxInMemorySize" value="40960"/> </bean>
controller获取多个文件:
方式一:
@RequestMapping(value = "models/{id}",method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")
@ResponseBody
public String models(@PathVariable int id,HttpServletRequest request, HttpSession session){
String json = null;
<span style="color:#3366ff;">CommonsMultipartResolver multipartResolver= new CommonsMultipartResolver(request.getServletContext());
MultipartHttpServletRequest multipartHttpServletRequest = multipartResolver.resolveMultipart(request);
String modelTypeString = multipartHttpServletRequest.getParameter("modelType").trim();</span>
String weightString = multipartHttpServletRequest.getParameter("weight").trim();
String size = multipartHttpServletRequest.getParameter("size").trim();
String modelColorString = multipartHttpServletRequest.getParameter("modelColor").trim();
String os = multipartHttpServletRequest.getParameter("os").trim();
String describe = multipartHttpServletRequest.getParameter("describe").trim();
String image1 = multipartHttpServletRequest.getParameter("image1").trim();
image1 = image1.substring(image1.lastIndexOf("/")+1,image1.length());
String image2 = multipartHttpServletRequest.getParameter("image2").trim();
image2 = image2.substring(image2.lastIndexOf("/")+1,image2.length());
String image3 = multipartHttpServletRequest.getParameter("image3").trim();
image3 = image3.substring(image3.lastIndexOf("/")+1,image3.length());
if (StringUtils.isEmpty(size)||StringUtils.isEmpty(os)||StringUtils.isEmpty(modelTypeString)
||StringUtils.isEmpty(modelColorString)||StringUtils.isEmpty(weightString)){
json = Json.getStatusMessage(1030,MessageCode.getMessageStatusCode(1030));
}else {
Map map = new HashMap();
List<String> list = new ArrayList<String>();
map.put("modelType",Integer.parseInt(modelTypeString));
map.put("modelColor",Integer.parseInt(modelColorString));
map.put("weight",Double.parseDouble(weightString));
map.put("size",size);
map.put("os",os);
if(!StringUtils.isEmpty(describe)){
map.put("describe",describe);
}
<span style="background-color: rgb(51, 102, 255);"> Iterator<String> iterator = multipartHttpServletRequest.getFileNames();//获取多个文件名</span>
String ftpStore = FTPClientUtils.getFTPSetting("ftpStore");
String modelImgPath = FTPClientUtils.getFTPSetting("modelPath");
String FtpUploadPath = ftpStore+"/"+modelImgPath+"/";
if (FTPClientUtils.openConnectFTPService()) {
<span style="background-color: rgb(51, 102, 255);"> while (iterator.hasNext()) {//遍历多个文件</span>
<span style="background-color: rgb(51, 102, 255);"> String requestName = iterator.next();
MultipartFile multipartFile = multipartHttpServletRequest.getFile(requestName);//获取文件</span>
<span style="background-color: rgb(51, 102, 255);"> if (!multipartFile.isEmpty()) {//判断文件不为空</span>
String fileName = multipartFile.getOriginalFilename();//获取文件名
String[] fileNames = fileName.split("\\.");
String type = fileNames[fileNames.length - 1];
String remoteFileName = CommonUtils.UUID() + "." + type;
try {
boolean flag = FTPClientUtils.inputStreamUploadFile(<span style="background-color: rgb(51, 102, 255);">multipartFile.getInputStream()</span>, remoteFileName, FtpUploadPath);
if (!flag) {
return Json.getStatusMessage(1033, MessageCode.getMessageStatusCode(1033));
}
} catch (IOException e) {
logger.info("修改图片上传失败!");
e.printStackTrace();
}
list.add(FtpUploadPath+remoteFileName);
if(requestName.equals("file1")){
map.put("image1", remoteFileName);
}else if (requestName.equals("file2")){
map.put("image2", remoteFileName);
}else if (requestName.equals("file3")){
map.put("image3", remoteFileName);
}
}
}
}else {
return Json.getStatusMessage(1032,MessageCode.getMessageStatusCode(1032));
}
json = HttpProtocolHandle.commitData("PUT", APIConstant.BASIC+"models/"+id, JSONObject.fromObject(map).toString(), session);
if(Json.isSuccess(json)){
if(map.get("image1")!=null){
FTPClientUtils.deleteFile(FtpUploadPath+image1);
}
if(map.get("image2")!=null){
FTPClientUtils.deleteFile(FtpUploadPath+image2);
}
if(map.get("image3")!=null){
FTPClientUtils.deleteFile(FtpUploadPath+image3);
}
}else{
for (int i=0;i<list.size();i++) {
if(!FTPClientUtils.deleteFile(list.get(i))){
logger.info("型号图片上传,业务服务器数据保存失败,删除"+map.get("image"+i).toString()+"失败!");
}
}
list.clear();
}
FTPClientUtils.closeConnection();
}
return json;
}
方式二:
@RequestMapping(value = "models",method = RequestMethod.POST, produces = "application/json;charset=UTF-8") @ResponseBody public String createModels(@RequestParam("file") MultipartFile[] file, HttpServletRequest request, HttpSession session){ String json = null; String name = request.getParameter("name").trim(); String modelTypeString = request.getParameter("modelType").trim(); String modelColorString = request.getParameter("modelColor").trim(); String weightString = request.getParameter("weight"); String size = request.getParameter("size").trim(); String os = request.getParameter("os").trim(); String describe = request.getParameter("describe").trim(); if (StringUtils.isEmpty(name)||StringUtils.isEmpty(size)||StringUtils.isEmpty(os)||StringUtils.isEmpty(modelTypeString) ||StringUtils.isEmpty(modelColorString)||StringUtils.isEmpty(weightString)){ json = Json.getStatusMessage(1030,MessageCode.getMessageStatusCode(1030)); }else { Map map = new HashMap(); map.put("name",name); map.put("modelType",Integer.parseInt(modelTypeString)); map.put("modelColor",Integer.parseInt(modelColorString)); map.put("weight",Double.parseDouble(weightString)); map.put("size",size); map.put("os",os); if(!StringUtils.isEmpty(describe)){ map.put("describe",describe); } if(file != null && file.length > 0){//判断文件不能为空,file数组必须大于0才有文件 if( FTPClientUtils.openConnectFTPService()){ String ftpStore = FTPClientUtils.getFTPSetting("ftpStore"); String modelImgPath = FTPClientUtils.getFTPSetting("modelPath"); String FtpUploadPath = ftpStore+"/"+modelImgPath+"/"; // String visitPath = FTPClientUtils.getFTPSetting("visitPath")+modelImgPath; try{ List<String> list = new ArrayList<String>();
//循环遍历多个文件 for (int i=0;i<file.length;i++){ String fileName = file[i].getOriginalFilename();//获取文件名 String[] fileNames= fileName.split("\\."); String type = fileNames[fileNames.length-1];//获取文件名后缀 String remoteFileName = CommonUtils.UUID()+"."+type;//通过UUID获取唯一ID来做文件名
//file[i].getInputStream()通过IO流的形式保存文件到资源服务器 boolean flag = FTPClientUtils.inputStreamUploadFile(file[i].getInputStream(),remoteFileName,FtpUploadPath); if (!flag){ return Json.getStatusMessage(1033,MessageCode.getMessageStatusCode(1033)); } map.put("image"+(i+1),remoteFileName); list.add(FtpUploadPath+remoteFileName); } JSONObject jsonObject = JSONObject.fromObject(map); json = HttpProtocolHandle.commitData("POST", APIConstant.BASIC+"models", jsonObject.toString(), session); if (!Json.isSuccess(json)){ for (int i=0;i<list.size();i++) { if(!FTPClientUtils.deleteFile(list.get(i))){ logger.info("型号图片上传,业务服务器数据保存失败,删除"+map.get("image"+i).toString()+"失败!"); } } } list.clear(); }catch (IOException e){ e.printStackTrace(); } FTPClientUtils.closeConnection(); }else { json = Json.getStatusMessage(1032,MessageCode.getMessageStatusCode(1032)); } }else { json = Json.getStatusMessage(1031,MessageCode.getMessageStatusCode(1031)); } } return json; }