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对象,然后每次检测到用户打开上传头像页面,在这个页面

springboot整合项目-商城个人头像上传功能的更多相关文章
- 【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能
作者:Dreawer链接:https://zhuanlan.zhihu.com/p/24465742来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:梦游的龙猫(转 ...
- [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能
很久没有更新博客了,再不写点东西都烂了. 这次更新一个小内容,是两个插件的组合使用,实现头像上传功能. 业务需求: 头像上传功能,要对上传的文件进行剪切,且保证头像到服务器时必须是正方形的. 优化&l ...
- qt实现头像上传功能
想必大家都使用过qt的自定义头像功能吧,那么图1应该不会陌生,本片文章我就是要模拟一个这样的功能,虽然没有这么强大的效果,但是能够满足一定的需求. 图1 qq上传图片 首先在讲解功能之前,我先给出一片 ...
- SpringBoot整合Fastdfs,实现图片上传(IDEA)
我们部署Fastdfs,就是为了实现文件的上传. 现在使用idea整合Fastdfs,实现图片上传 部署环境:Centos7部署分布式文件存储(Fastdfs) 利用Java客户端调用FastDFS ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...
- SpringBoot整合FastDFS实现图片的上传
文件的上传和预览在web开发领域是随处可见,存储的方式有很多,本文采用阿里巴巴余庆大神开发的FastDFS进行文件的存储,FastDFS是一个分布式文件存储系统,可以看我上一篇博文,有安装和配置教程 ...
- Django项目实战—用户头像上传
1 将文件保存到服务器本地 upload.html <!DOCTYPE html> <html lang="en"> <head> <me ...
- TP5.0整合webuploader实现多图片上传功能
在https://github.com/fex-team/webuploader 下载webuploader并解压,解压后放到public里面.其中我把解压缩后的文件夹改名为webuploader,放 ...
- php实现头像预览上传功能
最近在做php第二阶段的项目,需要用到头像上传的功能 我们要完成头像上传功能,一共要写两个php页面,第一个页面我们叫做touxiang.php,第二个页面我们叫做upload.php 1.touxi ...
随机推荐
- ettercap之dns欺骗攻击
前言:攻击机(kali)和受害机(win7)需在同一网段下 1.首先创建一个钓鱼克隆网站,这里我就利用CS来弄了 2.对Ettercap的dns文件进行编辑 3.开启ettercap 4.去受害机看看 ...
- 定时器控制单只LED灯
点击查看代码 #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit LED=P0^0; ...
- Linux上安装jdk 1.8
1.下载jdk1.8 这里贴个oracle官网链接 https://www.oracle.com/java/technologies/downloads/ 里面的jdk版本基本都有 2.将压缩包上传 ...
- django_day01
内容回顾 django处理浏览器的请求流程: 请求发送到wsgi wsgi封装了请求的相关数据(request) django去匹配路径 根据路径判断要执行哪个函数 执行函数 函数执行具体的业务逻辑 ...
- 第八十五篇:Vue购物车(六) 总价的动态计算
好家伙, 1.实现总价的动态计算 商品数量被动态的改变后, 相应的总价同样会改变 所以我们需要重新计算总价格了 这个的实现并不难 我只要拿到商品的数量就好了 我们用一个计算属性计算出已勾选商品的总数量 ...
- nginx的安装和配置
目录 目录 一.购买下载SSL证书 二.修改Nginx配置信息 三.重启Nginx 一.购买下载SSL证书 SSL证书阿里云做活动期间可以免费申请,购买SSL证书时选择单域名-DV SSL-免费版即可 ...
- 通过ftutilx 插件实现流版式文件全文检索
Oracle 支持流版式文件的全文检索,而原生的PostgreSQL是不支持流版式文件全文检索的.KingbaseES 通过ftutilx 插件将流版式文件转换成文本文件,从而支持流版式文件全文检索. ...
- Unity-编辑器拓展之GUILayout,EditorGUILayout布局 { }
Unity 脚本 API 中文版 链接: https://docs.unity3d.com/cn/2019.4/ScriptReference/ 创建自定义窗口 public class MyWind ...
- web前端小知识 —— 【HTML,CSS,JS】集锦 【第一期】 { }
1.获取元素样式属性的方法 第 一 种 : 较灵活,能获取传进来想获取的元素的样式属性,返回的是[字符串] function getStyle(obj, name) { // IE // 主流 ret ...
- torch.sort 和 torch.argsort
定义 torch.sort(input,dim,descending) torch.argsort(input,dim,descending) 用法 torch.sort:对输入数据排序,返回两个值, ...