上传头像的功能

持久层

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整合项目-商城个人头像上传功能的更多相关文章

  1. 【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能

    作者:Dreawer链接:https://zhuanlan.zhihu.com/p/24465742来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:梦游的龙猫(转 ...

  2. [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能

    很久没有更新博客了,再不写点东西都烂了. 这次更新一个小内容,是两个插件的组合使用,实现头像上传功能. 业务需求: 头像上传功能,要对上传的文件进行剪切,且保证头像到服务器时必须是正方形的. 优化&l ...

  3. qt实现头像上传功能

    想必大家都使用过qt的自定义头像功能吧,那么图1应该不会陌生,本片文章我就是要模拟一个这样的功能,虽然没有这么强大的效果,但是能够满足一定的需求. 图1 qq上传图片 首先在讲解功能之前,我先给出一片 ...

  4. SpringBoot整合Fastdfs,实现图片上传(IDEA)

    我们部署Fastdfs,就是为了实现文件的上传. 现在使用idea整合Fastdfs,实现图片上传 部署环境:Centos7部署分布式文件存储(Fastdfs) 利用Java客户端调用FastDFS ...

  5. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  6. SpringBoot整合FastDFS实现图片的上传

     文件的上传和预览在web开发领域是随处可见,存储的方式有很多,本文采用阿里巴巴余庆大神开发的FastDFS进行文件的存储,FastDFS是一个分布式文件存储系统,可以看我上一篇博文,有安装和配置教程 ...

  7. Django项目实战—用户头像上传

    1 将文件保存到服务器本地 upload.html <!DOCTYPE html> <html lang="en"> <head> <me ...

  8. TP5.0整合webuploader实现多图片上传功能

    在https://github.com/fex-team/webuploader 下载webuploader并解压,解压后放到public里面.其中我把解压缩后的文件夹改名为webuploader,放 ...

  9. php实现头像预览上传功能

    最近在做php第二阶段的项目,需要用到头像上传的功能 我们要完成头像上传功能,一共要写两个php页面,第一个页面我们叫做touxiang.php,第二个页面我们叫做upload.php 1.touxi ...

随机推荐

  1. LOJ6029「雅礼集训 2017 Day1」市场 (线段树)

    题面 从前有一个学校,在 O n e I n D a r k \rm OneInDark OneInDark 到任之前风气都是非常良好的,自从他来了之后,发布了一系列奇怪的要求,挟制了整个学校,导致风 ...

  2. [NOI2021] 密码箱 (平衡树,连分数,Stern-Brocot 树,矩阵)

    题面 记忆犹新 题解 f f f 函数值给得非常明显,一看就给人一种熟悉感--这不是连分数吗? 众所周知,连分数有个递推公式,即 p i = a i p i − 1 + p i − 2 q i = a ...

  3. Jamie and Tree (dfs序 + 最近公共祖先LCA)

    题面 题解 我们求它子树的权值和,一般用dfs序把树拍到线段树上做. 当它换根时,我们就直接把root赋值就行了,树的结构不去动它. 对于第二个操作,我们得到的链和根的相对位置有三种情况: 设两点为A ...

  4. .Net Core&RabbitMQ死信队列

    过期时间 RabbitMQ可以为消息和队列设置过期时间Time To Live(TTL).其目的即过期. 消息过期时间 消息存储在队列中时,如果想为其设置一个有限的生命周期,而不是一直存储着,可以为其 ...

  5. Java使用定时任务详解

    定时任务 目录 定时任务 SpringBoot定时任务 默认单线程 使用异步多线程 Spring定时任务XML配置(注解形式几乎同上) 使用springTask: ----springTask为spr ...

  6. 第三十三篇:关于ES6,JSON和Webpack

    好家伙 1.什么是ES6? ECMAScript是javascript标准 ES6就是ECMAScript的第6个版本 (大概是一个语法标准规范) 2.什么是JSON? JSON 是什么,在数据交换中 ...

  7. KingbaseES R6集群归档备份故障分析解决案例

    案例说明: 在使用ps工具查看主库进程,发现主库'archiver'进程失败,检查sys_log日志可以发现归档失败的信息.通过sys_log日志提取归档语句手工执行归档操作,提示"当前数据 ...

  8. Python数据科学手册-机器学习: 流形学习

    PCA对非线性的数据集处理效果不太好. 另一种方法 流形学习 manifold learning 是一种无监督评估器,试图将一个低维度流形嵌入到一个高纬度 空间来描述数据集 . 类似 一张纸 (二维) ...

  9. Django 创建 APP和目录结构介绍

    一.通过pip安装Django 以windows 系统中使用pip命令安装为例 win+r,调出cmd,运行命令:pip install django自动安装PyPi 提供的最新版本.指定版本,可使用 ...

  10. Beats: 使用 Filebeat 进行日志结构化

    文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/106688240 生产一个叫做 json_logs 的文件: {"user_ ...