Spring MVC实现多文件上传

在上次单文件上传的基础上: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" /> 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值