社交软件图片上传功能的后端实现思路

功能流程:
1. 新建userBO对象从前端接收base64字符串,转换为文件对象
2.将文件对象转换为MultipartFile(fastdfs所需要的文件类型)
3.利用fastDFSClient工具上传图片,上传成功会返回文件存储地址,并且会自动生成一个缩略图
4.缩略图有命名规则,按照规则获取缩略图的存储地址
5.将大图和缩略图的存储地址设定在userBO对象上
6.将用户对象信息更新至数据库,并将更新后的信息查询并返回给前端
 
 
主要代码展示如下:
controller
@PostMapping("/uploadFaceBase64")
      public JSONResult uploadFaceBase64(@RequestBody UsersBO userBO) throws Exception{
           
           // 获取前端传来的base64字符串, 然后转换为文件对象再上传
           String base64Data = userBO.getFaceData();
           String userFacePath = "C:\\" + userBO.getUserId() + "userFace64.png";
           FileUtils.base64ToFile(userFacePath, base64Data);
           
           // 上传文件到fastdfs
           MultipartFile faceFile = FileUtils.fileToMultipart(userFacePath);
           String url = fastDFSClient.uploadBase64(faceFile);
           System.out.println(url);
           
           // 上传后会生成两个图,一大一小,文件名形式为:
           // "ashidaosdausiudfpoiuspdfiu.png"
           // "ashidaosdausiudfpoiuspdfiu_80x80.png"
           
           // 获取缩略图的url
           String thump = "_80x80.";
           String arr[] = url.split("\\.");
           String thumpImgUrl = arr[0] + thump + arr[1];
           
           // 更新用户头像
           Users user = new Users();
           user.setId(userBO.getUserId());
           user.setFaceImage(thumpImgUrl);
           user.setFaceImageBig(url);
           

           

           Users result = userService.updateUserInfo(user);
           

           return JSONResult.ok(result);

service

@Transactional(propagation = Propagation.SUPPORTS)
      @Override
      public Users updateUserInfo(Users user) {
           userMapper.updateByPrimaryKeySelective(user);
           return queryUserById(user.getId());
      }
      @Transactional(propagation = Propagation.SUPPORTS)
      private Users queryUserById(String userId) {
           return userMapper.selectByPrimaryKey(userId);

      }

 

 
 
 
posted @ 2020-09-22 18:59  Edward_han  阅读(310)  评论(0编辑  收藏  举报