springboot整合项目-商城个人头像上传功能


上传头像的功能

持久层

1.sql语句的规划 avatar varchar(50) str - 字节流

将对象文件保存在操作系统上,然后在把这个文件的路径个记录下来,保存在avatar中,因为相比于字符流会更加的方便,将如果要打开这个文件可以依据这个路径去找到合格文件。在数据中只需要保存这个文件饿路径即可。将静态资源资源(图片、音频)放在某台电脑上,
在把这个电脑作为一台单独的服务器使用

对应的是一个更新用户avatar字段的sql预计

update  set avatar =? ,modified_user+?,modified_time = ?  where uid = ?

2.设计接口和抽象方法 UserMapper 用于修改用户的头像

   /**
     *
     * @param uid
     * @param avatar
     * @param modifiedUser
     * @param modifiedTime
     * @return
     *
     * @param ("sql映射文件中#{}占位符的变量名"):解决问题:当sql语句的占位符和映射的接口方法参数不一致是,需要将某个参数强行注入到某个占位符变量上时,可以使用@param这个注解来标注映射的关系。
     */
    Integer updateAvatarByUid(@Param("uid") Integer uid,
                              @Param("avatar") String avatar,
                              @Param("modifiedUser") String modifiedUser,
                              @Param("modifiedTime") Date modifiedTime);

3.接口的映射

UserMapper.xml 书写sql语句

业务层

1.异常的定义

1.cookie失效 or isdelete == 1 - 用户不存在
UserNotFoundException
2.更新的时候,又有可能会有各种位置的异常产生。 updateException

无需开发

2.具体业务方法

  @Override
    public void changeAvatar(Integer uid, String avatar, String username) {
        // 建议查询当前的用户是否存在
        User result = userMapper.findByUid(uid);
        if (result == null || result.getIsDelete().equals(1)) {
            throw  new UsernameNotFoundException("用户数据不存在");
        }
        //上传头像
        Integer integer = userMapper.updateAvatarByUid(uid, avatar, username, new Date());
        if (integer != 1) {
            throw  new UpdateException("更新时产生了未知的错误");
        }

    }

控制层

1.异常处理:

FileLoadException 泛指文件上传的异常 继承runtimeException异常
父类是:FileLoadException
FileEmptyException 文件为空的异常
FileSizeException 文件大小超出限制
FileTpeException 文件类型异常
FileUploadIoException 文件读写异常

else if (e instanceof FileEmptyException) {
            result.setState(6000);
            result.setMessage("上传文件为空的异常");
        }else if (e instanceof FileSizeException) {
            result.setState(6001);
            result.setMessage("文件大小超出限制的异常");
        }else if (e instanceof FileStateException) {
            result.setState(6002);
            result.setMessage("文件状态不符合的异常");
        }else if (e instanceof FileUploadIoException) {
            result.setState(6003);
            result.setMessage("文件读写错误的异常");
        }else if (e instanceof FileTypeException) {
            result.setState(6004);
            result.setMessage("文件类型异常的异常");
        }

需要在baseController需要添加对异常的统一处理

2.设计请求

/users/update_avatar
/post (get:2kb)
/ HttpSession session MultipartFile file
/JsonResult

3.实现方法

前端页面

在upload页面进行编写功能

enctype="multipart/form-data" 如果直接使用表单进行上传,需要给表单显示的添加一个属性enctype=multipart/from-data声明出来,不会将目标的数据做修正在上传,不同的字符串。

解决bug

1.更改默认的大小限制

springmvc默认为1mb的文件可以进行上传,手动的去修改springmvc默认上传的文件的大小

1.在配置文件中进行配置

2.采用java代码的形式来设置文件的上传大小的限制,主流中进行配置,可以定义一个方法,必须使用@bean修饰来修饰,在类的前面添加@configation注解进行修饰,返回值必须是MultipatConfigation

2.将上传的图片在网页中进行展示

3.登录后显示头像

可以更新头像成功后,将服务器返回的头像路径保存在客服端cookie对象,然后每次检测到用户打开上传头像页面,在这个页面