五 SpringMvc - 支付宝沙箱和关键字过滤,md5加密,SSM项目重要知识点( 六 )

3.4.2 控制层1.获取头像文件流,并保存图片;
2.将图片地址保存到用户的头像中;
3.刷新session中的用户信息;
@RequestMapping("/headImg")public String headImg(HttpSession session,                      @RequestParam("userHeaderImg") MultipartFile multipartFile,                      Map<String, String> map) throws IOException {    // 获取上传的头像文件名称    String targetFileName = multipartFile.getOriginalFilename();    System.out.println("------ 上传文件名:" + targetFileName + " ------");    // 重新定义新的文件名,要保留上传文件的类型    targetFileName = UUID.randomUUID().toString().substring(0, 8) + targetFileName.substring(targetFileName.indexOf("."));    System.out.println("------ 新的文件名:" + targetFileName + " ------");    // 上传文件,要保存服务器上的真实路径中,idea项目发布,默认不会放到目标tomcat中,放在本地项目的target目录中    String realFilePath = session.getServletContext().getRealPath("img/about");    System.out.println("------ 服务器真实路径:" + realFilePath + " ------");    // 目标文件目录可能不存在,不能人为干预,必须程序主动处理    File targetFilePath = new File(realFilePath);    if(!targetFilePath.exists()){        // 目标不存在,主动创建        if(targetFilePath.mkdirs()){            System.out.println("------ 上传目录创建成功 ------");        }    }    // 创建目标文件对象    File targetFile = new File(targetFilePath + "/" + targetFileName);    // 文件上传到服务器,只需要一步,组件自动支持功能    multipartFile.transferTo(targetFile);    // 数据库存入头像信息    targetFileName = "img/about/"+targetFileName;    //获取当前登录用户对象    User loginUser =  (User)session.getAttribute(CommConstant.SYS_SESSION_LOGINUSER);    //换头像    loginUser.setUhead(targetFileName);    //重置 session 中的 用户对象    session.setAttribute(CommConstant.SYS_SESSION_LOGINUSER,loginUser);    // 调用 修改用户信息 方法,修改用户信息    User userForm = new User();    userForm.setUid(loginUser.getUid());    userForm.setUhead(loginUser.getUhead());    userService.modUserInfo(userForm);    //放入修改成功提示信息,可以不提示(操作过后感觉,不返回效果好些,看时机需求)    map.put("modUserInfoMsg","用户头像修改成功!");    return "/personCenter";}

经验总结扩展阅读