首页 > 其他分享 >9.完善用户信息和上传头像

9.完善用户信息和上传头像

时间:2022-10-30 12:25:50浏览次数:39  
标签:上传 用户 private 头像 tanhua userInfo import com UserInfo

完善用户信息和上传头像

一、完善用户信息

/**
* 完善用户信息:表现层
* 请求路径:/user/loginReginfo
* 请求方式:post
* 请求参数:Headers(请求头):token;Body(请求体):UserInfo
* 响应数据:null
*/

1.1服务提供者

(1)实体类、封装数据

package com.tanhua.model.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo implements Serializable {

    /**
     * 由于userinfo表和user表之间是一对一关系
     *   userInfo的id来源于user表的id
     */
    @TableId(type= IdType.INPUT)
    private Long id; //用户id
    private String nickname; //昵称
    private String avatar; //用户头像
    private String birthday; //生日
    private String gender; //性别
    private Integer age; //年龄
    private String city; //城市
    private String income; //收入
    private String education; //学历
    private String profession; //行业
    private Integer marriage; //婚姻状态
    private String tags; //用户标签:多个用逗号分隔
    private String coverPic; // 封面图片
    private Date created;
    private Date updated;

    //用户状态,1为正常,2为冻结
    @TableField(exist = false)
    private String userStatus = "1";
}

(2),dao(mapper),操作数据层

package com.tanhua.dubbo.mappers;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tanhua.model.domain.UserInfo;

public interface UserInfoMapper extends BaseMapper<UserInfo> {
}

(3)业务层接口

package com.tanhua.dubbo.api;

import com.tanhua.model.domain.UserInfo;

public interface UserInfoApi {
    //完善用户信息
    void saveUserInfo(UserInfo userInfo);

    //根据id修改用户信息
    void updateUserInfo(UserInfo userInfo);
}

(4)业务层实现类

package com.tanhua.dubbo.api;

import com.tanhua.dubbo.mappers.UserInfoMapper;
import com.tanhua.model.domain.UserInfo;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

@DubboService
public class UserInfoAplImpl  implements UserInfoApi{

    @Autowired
    private UserInfoMapper userInfoMapper;


    /**
     * 完善用户信息,添加到数据库tb_user_info表
     * @param userInfo
     */
    public void saveUserInfo(UserInfo userInfo) {

        userInfoMapper.insert(userInfo);
    }

    /**
     * 根据id修改用户信息
     * @param userInfo
     */
    public void updateUserInfo(UserInfo userInfo) {
        userInfoMapper.updateById(userInfo);
    }
}

1.2服务消费者

1.校验token是否合法

2.获取token中携带的Userid给UserInfo设置id

3.调用UserInfoService保存数据

UserController

package com.tanhua.server.controller;

import com.tanhua.commons.utils.JwtUtils;
import com.tanhua.model.domain.UserInfo;
import com.tanhua.server.service.UserInfoService;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
@RequestMapping("/user")
public class UserController {


    @Autowired
    private UserInfoService userInfoService;

    /**
     * 完善用户信息:表现层
     * 请求路径:/user/loginReginfo
     * 请求方式:post
     * 请求参数:Headers(请求头):token;Body(请求体):UserInfo
     * 响应数据:null
     * @return
     */
    @PostMapping("/loginReginfo")
    public ResponseEntity uploadUserHeadImag(@RequestBody UserInfo userInfo,
                                             @RequestHeader("Authorization") String token){
        //1.校验token是否合法
        boolean result = JwtUtils.verifyToken(token);
        if(!result){
            //token为空,用户未登录
            return ResponseEntity.status(401).body(null);
        }

        //2.获取token中携带的Userid给UserInfo设置id
        Claims claims = JwtUtils.getClaims(token);
        Integer id = (Integer) claims.get("id");


        userInfo.setId(Long.valueOf(id));

        //3.调用UserInfoService保存数据
        userInfoService.saveUserInfo(userInfo);


        return ResponseEntity.ok(null);

    }
}

UserInfoService

package com.tanhua.server.service;

import com.tanhua.autoconfig.template.FaceApiTemplate;
import com.tanhua.autoconfig.template.OssTemplate;
import com.tanhua.dubbo.api.UserInfoApi;
import com.tanhua.model.domain.UserInfo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Service
public class UserInfoService {


    @DubboReference
    private UserInfoApi userInfoApi;

    @Autowired
    private OssTemplate ossTemplate;

    @Autowired
    private FaceApiTemplate faceApiTemplate;
    /**
     * 向数据库表添加用户信息
     * @param userInfo
     */
    public void saveUserInfo(UserInfo userInfo) {
        userInfoApi.saveUserInfo(userInfo);
    }
}

二、上传头像

UserController

package com.tanhua.server.controller;

import com.tanhua.commons.utils.JwtUtils;
import com.tanhua.model.domain.UserInfo;
import com.tanhua.server.service.UserInfoService;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
@RequestMapping("/user")
public class UserController {


    @Autowired
    private UserInfoService userInfoService;

    /**
     * 用户上传头像
     * 1.请求路径:/user/loginReginfo/head
     * 2.请求方式:post
     * 3.请求参数:Authorization:token;headPhoto(用户上传的头像文件)
     * 4.响应结果:null
     * @return
     */
    @PostMapping("/loginReginfo/head")
    public ResponseEntity uploadUserimage(MultipartFile headPhoto,
                                          @RequestHeader("Authorization") String token ) throws IOException {


        //1.校验token的合法性
        boolean result = JwtUtils.verifyToken(token);
        if(!result){
            return ResponseEntity.status(401).body(null);
        }
        //2.获取token中携带的用户id
        Claims claims = JwtUtils.getClaims(token);
        Long id = (Long) claims.get("id");

        //3.调用业务层完成头像上传
        userInfoService.uploadUserHeadImage(headPhoto,id);

        return ResponseEntity.ok(null);

    }
}

UserInfoService

1.调用封装好的阿里云oss组件把用户上传的头像上传到阿里云oss,得到图片文件访问路径

2.调用百度人脸识别组件检测图片是否包含人脸

3.图片不包含人脸,抛出异常

4.图片包含人脸,调用api更新用户信息表

package com.tanhua.server.service;

import com.tanhua.autoconfig.template.FaceApiTemplate;
import com.tanhua.autoconfig.template.OssTemplate;
import com.tanhua.dubbo.api.UserInfoApi;
import com.tanhua.model.domain.UserInfo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Service
public class UserInfoService {


    @DubboReference
    private UserInfoApi userInfoApi;

    @Autowired
    private OssTemplate ossTemplate;

    @Autowired
    private FaceApiTemplate faceApiTemplate;
    /**
     * 向数据库表添加用户信息
     * @param userInfo
     */
    public void saveUserInfo(UserInfo userInfo) {
        userInfoApi.saveUserInfo(userInfo);
    }




    /**
     * 用户上传头像;业务逻辑层
     *
     */
    public void uploadUserHeadImage(MultipartFile headPhoto, Long userId) throws IOException {


        //1.调用封装好的阿里云oss组件把用户上传的头像上传到阿里云oss,得到图片文件访问路径
        String headPhotoUrl = ossTemplate.upload(headPhoto.getOriginalFilename(), headPhoto.getInputStream());
        //2.调用百度人脸识别组件检测图片是否包含人脸
        boolean result = faceApiTemplate.checkFace(headPhotoUrl);
        if(!result){
            //图片不包含人脸,抛出异常
            throw new RuntimeException("图片卜包含人脸");
        }

        //3.图片包含人脸
        UserInfo userInfo = new UserInfo();
        userInfo.setId(userId);
        userInfo.setAvatar(headPhotoUrl);
        userInfoApi.updateUserInfo(userInfo);
    }


}

标签:上传,用户,private,头像,tanhua,userInfo,import,com,UserInfo
From: https://www.cnblogs.com/zhangdashuaige/p/16840937.html

相关文章

  • 5.用户手机验证码登录
    用户手机验证码登录一、yapi接口文档二、代码实现1.服务提供者1.1在tanhua-dubbo-db模块创建Mapper接口com/tanhua/dubbo/mappers/UserMapper.java(数据层,查询数据库)p......
  • Unity-Firebase Crashlytics安卓上传符号表
    最近项目线上突然多了不少崩溃记录,但是看不到崩溃的具体方法。简单写下过程,很多都是文档有的,就不抄一遍了。毕竟这都是接好就忘的东西。ios没啥问题,就不记录了。什么是......
  • PS新手教程-如何使用PS制作人物剪影效果头像
    如何使用PS制作人物剪影效果头像?给大家介绍如何使用PS制作人物剪影效果头像,一起来看看吧。1.打开PS,导入人影和人像素材照片,将人影素材复制到人像素材中。2.复制素材......
  • SoringCloud(四) - 微信获取用户信息
    1、项目介绍2、微信公众平台和微信开放文档2.1微信公众平台2.1.1网址链接https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index......
  • useradd 创建用户
    创建用户目录创建新用户:sudouseradd-r-m-s/bin/bashdongyuanxin_2016150127。其中参数的意义如下:-r:建立系统账号-m:自动建立用户的登入目录-s:指定用户登入后所使用......
  • Kubernetes_19_梳理出UserAccount用户账号一条线
    系列文章目录文章目录​​系列文章目录​​​​前言​​​​一、六种认证方式​​​​二、X509客户证书(最重要的用户账号凭证文件,默认方式)​​​​三、在HTTP请求中放入......
  • antd的update组件自定义上传样式及列表样式
    项目需求按UI设计上传的样式需要把showUploadList={false},自己写上传列表//本次上传的文件const[fileList,setFileList]=useState([]);//初始化时存储之前上传......
  • 用户场景
    用户场景一、用户1.权限起草、修改、发布、接受、管理公文确定公文密级注册登记个人账号2.功能公文草拟:根据自身需要进行公文的撰写,可与公文格式一同设计。公......
  • 更换微信小程序头像(一年内可申请修改5次)
    (1)电脑端登录“微信公众平台”,网址为“https://mp.weixin.qq.com/” (2)小程序管理员扫码登录,登录之后,点击左侧最下方的“设置” (3)点击“设置-基本设置-小程序头像-......
  • ubuntu docker 安装指定版本 MongoDB 并配置用户密码
    ubuntudocker安装指定版本MongoDB并配置用户密码​​初​​​​查看安装的镜像​​​​运行容器​​​​检查运行​​​​进入数据库​​​​创建用户和密码​​​​创......