上传头像的功能持久层1.sql语句的规划 avatarvarchar(50)str - 字节流将对象文件保存在操作系统上,然后在把这个文件的路径个记录下来,保存在avatar中,因为相比于字符流会更加的方便,将如果要打开这个文件可以依据这个路径去找到合格文件 。在数据中只需要保存这个文件饿路径即可 。将静态资源资源(图片、音频)放在某台电脑上,在把这个电脑作为一台单独的服务器使用
对应的是一个更新用户avatar字段的sql预计
updateset 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失效orisdelete == 1-用户不存在UserNotFoundException2.更新的时候,又有可能会有各种位置的异常产生 。updateException
无需开发2.具体业务方法@Overridepublic void changeAvatar(Integer uid, String avatar, String username) {// 建议查询当前的用户是否存在User result = userMapper.findByUid(uid);if (result == null || result.getIsDelete().equals(1)) {thrownew UsernameNotFoundException("用户数据不存在");}//上传头像Integer integer = userMapper.updateAvatarByUid(uid, avatar, username, new Date());if (integer != 1) {thrownew UpdateException("更新时产生了未知的错误");}}
控制层1.异常处理:FileLoadException泛指文件上传的异常继承runtimeException异常父类是:FileLoadExceptionFileEmptyException 文件为空的异常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 sessionMultipartFile file/JsonResult
3.实现方法前端页面在upload页面进行编写功能
enctype="multipart/form-data" 如果直接使用表单进行上传,需要给表单显示的添加一个属性enctype=multipart/from-data声明出来,不会将目标的数据做修正在上传,不同的字符串 。
解决bug1.更改默认的大小限制springmvc默认为1mb的文件可以进行上传,手动的去修改springmvc默认上传的文件的大小1.在配置文件中进行配置 2.采用java代码的形式来设置文件的上传大小的限制,主流中进行配置,可以定义一个方法,必须使用@bean修饰来修饰,在类的前面添加@configation注解进行修饰,返回值必须是MultipatConfigation
2.将上传的图片在网页中进行展示3.登录后显示头像可以更新头像成功后,将服务器返回的头像路径保存在客服端cookie对象,然后每次检测到用户打开上传头像页面,在这个页面
经验总结扩展阅读
- Android 跨进程渲染
- torch检测什么 TORCH是什么检查项目
- 【Java复健指南09】项目练习全解--房屋出租系统
- Spring Boot 项目自定义 banner
- springboot项目整合-注册功能模块开发
- 十一 前后端分离项目:实现"删"功能(前后端)
- 十 前后端分离项目:实现"改"功能(前后端)
- 优雅的写好Vue项目代码 — 路由拆分、Vuex模块拆分、element按需加载
- SpringBoot 过滤器和拦截器
- 电脑赚钱的几种方法(可以赚钱的电脑项目)