SpringMVC中文件上传后表单其他属性为空

SpringMVC中文件上传,添加enctype=”multipart/form-data”后表单其他属性为空

问题

最近在开发一个银行的管理系统,用的是SpringMVC+Spring+Mybatis框架,在表单中上传文件的时候出现了form提交数据后,后台接收不到文件为null的情况我的form表单如下所示:

    
提交申请 取消

解决办法

后来在网上查资料,发现是”enctype=”multipart/form-data”的问题。删掉之后form表单数据可以被接收到,但是文件上传失败,不删的话文件上传成功,表单数据接收不到。试了很多种方法,都没有成功,以前是通过自己封装的一个工具类来获取jsp页面的数据的,但是显然这种方法已经不在适合上传文件的时候在后台接收数据,所以我改用了实体类来接收页面传过来的数据。代码如下:

/**
 * 项目立项增加界面提交
 * @param file
 * @param projectApply
 * @return
 * @throws Exception
 */
@RequestMapping(value = "/projectApplySave")
public String projectApplySave(@RequestParam(value = "address", required = false) MultipartFile file,ProjectApply projectApply) throws Exception {
    ModelAndView mv = this.getModelAndView();
    //通过session获取登录用户名
    Subject currentUser = SecurityUtils.getSubject();
    Session session = currentUser.getSession();
    User user = (User) session.getAttribute(Const.SESSION_USER);
    String user_name = user.getUSERNAME();
    String filePath = "";
    if (!file.getOriginalFilename().equals("")) {
        long time = System.currentTimeMillis();
        int number = (int)(Math.random()*900)+100;
        String name = time+""+number+""+user_name+"@"+file.getOriginalFilename();
        filePath = PathUtil.getClasspath() + Const.FILEPATHFILE + name; // 文件上传路径
        FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(filePath));
    }
    projectApply.setApply_report_address(filePath);
    projectApplyService.saveProjectApply(projectApply); 
    return "redirect:/asset/atp_showForm?saveResult=success";
}

这样就顺利的form表单的数据插入到了数据库,文件上传到了服务器。

你可能感兴趣的:(jsp)