SpringBoot 在线协同办公小程序开发 全栈式项目实战
v: ititit111222333
`package com.imooc.controller.center;
import com.imooc.controller.base.BaseController; import com.imooc.pojo.Users; import com.imooc.pojo.bo.center.CenterUserBO; import com.imooc.resource.FileUpload; import com.imooc.service.center.CenterUserService; import com.imooc.utils.CookieUtils; import com.imooc.utils.DateUtil; import com.imooc.utils.IMOOCJSONResult; import com.imooc.utils.JsonUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.*; import java.util.HashMap; import java.util.List; import java.util.Map;
/**
-
@author mark
-
@date 2021/4/16 0016 22:33 */ @Api(value = "用户中心接口", tags = {"用户中心相关接口"}) @RestController @RequestMapping({"/center"}) public class CenterUserController extends BaseController {
@Autowired private FileUpload fileUpload;
@Autowired private CenterUserService centerUserService;
@ApiOperation(value = "根据用户id获取用户数据", notes = "根据用户id获取用户数据", httpMethod = "GET") @GetMapping("/get-by-id") public IMOOCJSONResult getById(@ApiParam(value = "用户id", name = "userId", required = true) @RequestParam(value = "userId") String userId) { return IMOOCJSONResult.ok(centerUserService.getById(userId)); }
@ApiOperation(value = "根据用户id更新用户数据", notes = "根据用户id更新用户数据", httpMethod = "POST") @PostMapping("/update-by-id") public IMOOCJSONResult updateById(@ApiParam(value = "用户数据", name = "centerUserBO", required = true) @Valid CenterUserBO centerUserBO, BindingResult result, HttpServletRequest request, HttpServletResponse response) {
// 判断BindingResult是否保存错误的验证信息,如果有,则直接return if (result.hasErrors()) { Map<String, String> errorMap = getErrors(result); return IMOOCJSONResult.errorMap(errorMap); } Users users = centerUserService.updateById(centerUserBO); Users updateUser = setNullProperty(users); CookieUtils.setCookie(request, response, "user", JsonUtils.objectToJson(updateUser), true); return IMOOCJSONResult.ok();}
@ApiOperation(value = "用户头像修改", notes = "用户头像修改", httpMethod = "POST") @PostMapping("uploadFace") public IMOOCJSONResult uploadFace( @ApiParam(name = "userId", value = "用户id", required = true) @RequestParam String userId, @ApiParam(name = "file", value = "用户头像", required = true) MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
String fileSpace = fileUpload.getImageUserFaceLocation(); // 在路径上为每一个用户增加一个userid,用于区分不同用户上传 String uploadPathPrefix = File.separator + userId; // 开始文件上传 if (file != null) { FileOutputStream fileOutputStream = null; try { // 获得文件上传的文件名称 String fileName = file.getOriginalFilename(); if (StringUtils.isNotBlank(fileName)) { // 文件重命名 imooc-face.png -> ["imooc-face", "png"] String fileNameArr[] = fileName.split("\\."); // 获取文件的后缀名 String suffix = fileNameArr[fileNameArr.length - 1]; if (!suffix.equalsIgnoreCase("png") && !suffix.equalsIgnoreCase("jpg") && !suffix.equalsIgnoreCase("jpeg")) { return IMOOCJSONResult.errorMsg("图片格式不正确!"); } // face-{userid}.png // 文件名称重组 覆盖式上传,增量式:额外拼接当前时间 String newFileName = "face-" + userId + "." + suffix; // 上传的头像最终保存的位置 String finalFacePath = fileSpace + uploadPathPrefix + File.separator + newFileName; // 用于提供给web服务访问的地址 uploadPathPrefix += ("/" + newFileName); File outFile = new File(finalFacePath); if (outFile.getParentFile() != null) { // 创建文件夹 outFile.getParentFile().mkdirs(); } // 文件输出保存到目录 fileOutputStream = new FileOutputStream(outFile); InputStream inputStream = file.getInputStream(); IOUtils.copy(inputStream, fileOutputStream); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fileOutputStream != null) { fileOutputStream.flush(); fileOutputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } else { return IMOOCJSONResult.errorMsg("文件不能为空!"); } // 获取图片服务地址 String imageServerUrl = fileUpload.getImageServerUrl(); // 由于浏览器可能存在缓存的情况,所以在这里,我们需要加上时间戳来保证更新后的图片可以及时刷新 String finalUserFaceUrl = imageServerUrl + uploadPathPrefix + "?t=" + DateUtil.getCurrentDateString(DateUtil.DATE_PATTERN); // 更新用户头像到数据库 Users userResult = centerUserService.updateUserFace(userId, finalUserFaceUrl); setNullProperty(userResult); CookieUtils.setCookie(request, response, "user", JsonUtils.objectToJson(userResult), true); // TODO 后续要改,增加令牌token,会整合进redis,分布式会话 return IMOOCJSONResult.ok();}
//************************************************** 私有方法 ***********************************************//
private Map<String, String> getErrors(BindingResult result) { Map<String, String> map = new HashMap<>(); List errorList = result.getFieldErrors(); for (FieldError error : errorList) { // 发生验证错误所对应的某一个属性 String errorField = error.getField(); // 验证错误的信息 String errorMsg = error.getDefaultMessage();
map.put(errorField, errorMsg); } return map;}
/**
- 设置敏感信息 */ private Users setNullProperty(Users userResult) { userResult.setPassword(null); userResult.setMobile(null); userResult.setEmail(null); userResult.setCreatedTime(null); userResult.setUpdatedTime(null); userResult.setBirthday(null); return userResult; }
} `