在上次单文件上传的基础上:https://blog.csdn.net/qq_41172416/article/details/82839439进行以下的操作
1、修改POJO和DAO实现类
public class User{
//......其他属性省略
private String idPicPath;//证件照路径
private String workPicPath;//工作证照片路径
// ......getter和setter 方法省略
}
public int add(Connection connection, User user) throws Exception {
PreparedStatement pstm = null;
int updateRows = 0;
if(null != connection){
String sql = "insert into smbms_user (userCode,userName,userPassword," +
"userRole,gender,birthday,phone,address,creationDate,createdBy,idPicPath,workPicPath) " +
"values(?,?,?,?,?,?,?,?,?,?,?,?)";
Object[] params = {user.getUserCode(),user.getUserName(),user.getUserPassword(),
user.getUserRole(),user.getGender(),user.getBirthday(),
user.getPhone(),user.getAddress(),user.getCreationDate(),user.getCreatedBy(),user.getIdPicPath(),user.getWorkPicPath()};
updateRows = BaseDao.executeUpdate(connection, pstm, sql, params);
BaseDao.closeAll(null, pstm, null);
}
return updateRows;
}
2、改造文件上传表单页
<div>
<input type="hidden" id="errorinfo" value="${uploadFileError }">
<label for="a_idpicpath">证件照:</label>
<input type="file" name="attachs" id="a_idpicpath" />
<font color="red"></font>
</div>
<div>
<input type="hidden" id="errorinfo_wp" value="${uploadFileError }">
<label for="a_workPicPath">工作证照片:</label>
<input type="file" name="attachs" id="a_workPicPath" />
<font color="red"></font>
</div>
注意:Spring MVC处理多文件上传:表单页面增加file标签即可,但是需要注意上传文件的组件名需要一致,将来会以数组的形式传递给控制器的处理方法。
3、改造控制器
@RequestMapping(value="/addsave.html",method=RequestMethod.POST)
public String addUserSave(User user, HttpSession session,
HttpServletRequest request,
@RequestParam(value="attachs",required=false) MultipartFile [] attachs){
String idPicPath=null;
String workPicPath=null;
String errorInfo=null;
boolean flag=true;
String path=request.getSession().getServletContext().getRealPath("statics"+File.separator+"uploadfiles");
for (int i = 0; i < attachs.length; i++) {
MultipartFile attach = attachs[i];
//判断文件是否为空
if(!attach.isEmpty()){
if(i==0){
errorInfo="uploadFileError";
}else if(i==1){
errorInfo="uploadWpError";
}
String oldFileName=attach.getOriginalFilename();//原文件名
String prefix=FilenameUtils.getExtension(oldFileName);//原文件后缀
int filesize=500000;
if(attach.getSize()>filesize){
request.setAttribute("uploadFileError", "上传文件不得超过 500KB");
return "useradd";
}else if(prefix.equalsIgnoreCase("jpg")
|| prefix.equalsIgnoreCase("png")
|| prefix.equalsIgnoreCase("jpeg")
|| prefix.equalsIgnoreCase("pneg")){//上传图片格式不正确
String fileName=System.currentTimeMillis()+RandomUtils.nextInt(1000000)+"_Personal.jpg";
File targetFile=new File(path, fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//保存
try {
attach.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("uploadFileError", " * 上传失败!");
flag=false;
}
if(i==0){
idPicPath=path+File.separator+fileName;
}else if(i==1){
workPicPath=path+File.separator+fileName;
}
}else{
request.setAttribute("uploadFileError", " * 上传图片格式不正确!");
flag=false;
}
}
}
if(flag){
user.setCreatedBy( ((User)session.getAttribute(Constants.USER_SESSION)).getId());//创建者
user.setCreationDate(new Date());//创建时间
user.setIdPicPath(idPicPath);
user.setWorkPicPath(workPicPath);
if(userService.add(user)){
return "redirect:/user/userlist.html";
}
}
return "useradd";
}
注意:多文件上传,也可以采用单独入参,控制器处理方法如下:
public String addUserSave(User user,
HttpSession session,
HttpServletRequest request,
@RequestParam(value="a_idpicPath",required=false) MultipartFile idPicFile,
@RequestParam(value="a_workPicPath",required=false) MultipartFile workPicFile){
// ......方法体省略(分别进行两个文件的上传操作和数据库相应字段的更新)
}
还需要修改页面(useradd.jsp)file标签的name属性,如下所示:
<input type="file" name="a_idpicPath" id="a_idpicpath" />
<input type="file" name="a_workPicPath" id="a_workPicPath" />