账号设置--头像上传以及修改密码

该博客详细介绍了如何在Spring MVC中实现头像上传功能,包括使用MultipartFile接收图片,处理文件格式,生成随机文件名,存储到服务器,并更新用户头像URL。同时,还展示了如何响应客户端请求,返回头像图片。此外,还涵盖了修改密码的处理逻辑,确保新密码的安全性和一致性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

头像上传

1、首先是在Controller中写上传头像的业务处理
/upload
使用MultipartFile来接收图片

  @RequestMapping(path = "/upload", method = RequestMethod.POST)
    public String uploadHeader(MultipartFile headerImage, Model model) {
        if (headerImage==null) {
            model.addAttribute("error","您还没有选择图片");
            return "/site/setting";
        }
        String fileName = headerImage.getOriginalFilename();
//        获取文件名的后缀
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        if (StringUtils.isNullOrEmpty(suffix)) {
            model.addAttribute("error","文件的格式不正确");
            return "/site/setting";
        }
//        生成随机文件名
        fileName = CommunityUtil.generateUUID()+suffix;
//        确定文件存放路径
        File dest = new File(uploadPath+"/"+fileName);
        try {
//            把图片写入到服务器保存
            headerImage.transferTo(dest);
        } catch (IOException e) {
            logger.error("上传文件失败"+e.getMessage());
            throw new RuntimeException("上传文件失败,服务器发生异常",e);
        }
//        更新用户的头像
//        例如:http://localhost:8080/community/user/header/xxx.png
        User user = hostHolder.getUser();
        String headerUrl = domain + contextPath + "/user/header/" + fileName;
        userService.updateHeader(user.getId(),headerUrl);
        return "redirect:/index";
    }

2、客户端响应头像
/header/fileName

@RequestMapping(path = "/header/{fileName}",method = RequestMethod.GET)
    public void getHeader(@PathVariable("fileName") String fileName, HttpServletResponse response) {
        //服务器存放的路径 uploadPath
        fileName = uploadPath + "/" + fileName;
        //文件名后缀
        String suffix = fileName.substring(fileName.lastIndexOf("."));
//        响应图片
        response.setContentType("/image/"+suffix);
        try (
//                java 7新语法:try后面加括号的变量fis会在finally自动关闭,前提是有关闭方法
                FileInputStream fis = new FileInputStream(fileName);  //读取文件字节流
                ) {
//            写入文件到浏览器响应
            OutputStream os = response.getOutputStream();
//              建立缓冲区,一次最多读取1024个字节
            byte[] buffer = new byte[1024];
//            建立游标
            int b = 0;
//            从fis中读取1024到buffer并赋值给b, 当b不等于-1表示读到了数据
            while ((b = fis.read(buffer)) != -1) {
                os.write(buffer,0,b);
            }

        } catch (IOException e) {
            logger.error("读取头像失败"+e);
        }

    }

修改密码

@RequestMapping(path = "/updatePwd", method = RequestMethod.POST)
    public String updatePwd(String oldPwd, String newPwd, String confirmPwd, Model model) {
        if (oldPwd.equals(newPwd)) {
            model.addAttribute("newError","新密码不能和旧密码一致");
            return "/site/setting";
        }
        if (!newPwd.equals(confirmPwd)) {
            model.addAttribute("confirmError","新密码和确认密码输入不一致");
            return "/site/setting";
        }
        User user = hostHolder.getUser();
        if (!user.getPassword().equals(CommunityUtil.md5(oldPwd+user.getSalt()))) {
            model.addAttribute("oldError","原密码错误");
            return "/site/setting";
        }
        userService.updataPassword(user.getId(),CommunityUtil.md5(newPwd+user.getSalt()));
        hostHolder.clear();
        return "/site/login";

    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值