SpringBoot 在线协同办公小程序开发 全栈式项目实战

87 阅读2分钟

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; }

} `