头像上传
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";
}