Springboot 上传头像
1. 在配置文件中指定外部环境, 注入到代码中
头像上传路径, 若不存在, 会根据该路径创建指定路径文件夹
upload:path: D:\\upload\headImgs
创建类 FileUtils 并读取配置文件中的值
@Component
@ConfigurationProperties(prefix = "upload")
@Data
public class FileUtils {private String path;public File getPath() {// 构建上传文件的存放 "文件夹" 路径String fileDirPath = new String(path);File fileDir = new File(fileDirPath);if (!fileDir.exists()) {// 递归生成文件夹fileDir.mkdirs();}return fileDir;}public boolean del(String filename) {File file = new File(path + File.separator + filename);return file.delete();}public boolean del(String path, String filename) {return new File(path + File.separator + filename).delete();}
}
2. 设置上传文件的限制配置
spring:servlet:multipart:max-request-size: 10MB # 上传文件的最大值max-file-size: 5MB # 单个文件上传的最大值
3. 设置外部路径映射到url
创建config类
注意: 映射路径时, 最后面一定要加 / (File.separator)
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {@Autowiredprivate FileUtils fileUtils;@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 加入头像文件夹映射 可通过 localhost:7188/headimage/.... 访问到指定位置的图片registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); // 默认头像registry.addResourceHandler("/headimage/**").addResourceLocations("file:"+fileUtils.getPath().getPath()+ File.separator);super.addResourceHandlers(registry);}
}
注意: 此时映射了两个路径
- 外部环境的路径
- static目录下的路径(该路径用于存放一张默认图片随意一张, 作为默认头像 可命名为 default.png)
4. 用户实体类中 加入 image 字段
该字段默认值为 ‘static/default.png’ 即为用户的默认头像
作用: 存放图片的相对路径
5. Controller层编写
@RestController
@RequestMapping("operate/User")
public class UserController extends BaseController<UserService> {@ApiOperation("修改(可以修改头像和邮箱)")@PutMappingpublic R modify(MultipartFile headImg, String email){return baseService.modify(headImg, email);}
}
6. Service层编写
public interface UserService extends IService<User> {R modify(MultipartFile headImg, String email);
}@Slf4j
@Service
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {@Autowiredprivate FileUtils fileUtils;/*** 获取当前用户名** @return*/private String getCurrentuserName() {// ...return username;}/*** 获取当前用户** @return*/public User getCurrentuser() {// ...return user;}@Overridepublic R modify(MultipartFile headImg, String email) {// 校验图片格式if (!imageTypeRight(headImg)) return R.fail("图片格式不正确");// 获取上传文件后的路径String path = uploadFile(headImg);User currentuser = getCurrentuser();// 删除之前的头像(如果是默认头像不删除)String image = currentuser.getImage();if (!image.equals("static/default.png")) {if (!fileUtils.del(image.substring(path.indexOf("/") + 1))) {log.info("修改头像时, 原来的头像删除失败");} else {log.info("修改头像时, 原来的头像删除成功");}}// 修改数据库中头像的路径信息 和 邮箱update(Wrappers.<User>lambdaUpdate().set(User::getEmail, email).set(User::getImage, path).eq(User::getUsername, currentuser.getUsername()));// 该路径为图片相对路径 可放在url中的服务后面 进行访问// 比如: http://localhost:9000/cloudos-opt/headimage/01c8806dc26d45539b53c22c766cd250.jpg// http://localhost:9000/cloudos-opt/static/default.pngreturn R.success(null, path);}/*** 验证图片的格式** @param file 图片* @return*/private boolean imageTypeRight(MultipartFile file) {// 首先校验图片格式List<String> imageType = Lists.newArrayList("jpg", "jpeg", "png", "bmp", "gif");// 获取文件名,带后缀String originalFilename = file.getOriginalFilename();// 获取文件的后缀格式String fileSuffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).toLowerCase(); //不带 .if (!imageType.contains(fileSuffix)) return false;return true;}/*** 上传文件** @param file* @return 返回路径*/public String uploadFile(MultipartFile file) {String originalFilename = file.getOriginalFilename();String fileSuffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).toLowerCase();// 只有当满足图片格式时才进来,重新赋图片名,防止出现名称重复的情况String newFileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileSuffix;// 该方法返回的为当前项目的工作目录,即在哪个地方启动的java线程File fileTransfer = new File(fileUtils.getPath(), newFileName);try {file.transferTo(fileTransfer);log.info("头像上传: " + fileTransfer.getPath());} catch (IOException e) {e.printStackTrace();}// 将图片相对路径返回给前端return "headimage/" + newFileName;}
}
7. 测试
获取默认头像的路径url为
http://localhost:8080/{spring-application-name}/static/default.png修改头像
修改完成后, 返回相对路径
访问修改后的头像
带上相对路径在url上直接可以访问
Springboot 上传头像相关推荐
- 解决 springboot 上传头像后台接收 MultipartFile 为 null 问题
springboot 参数上传需要加注解类型识别 错误示范(该方式获取 MultipartFile 为null ): @ApiOperation(value = "设置用户头像" ...
- springboot上传头像
控制层 1. 规划异常 FileUploadException 泛指文件上传异常(父类)继承RuntimeException FileEmptyException 文件为空 FileSizeExcep ...
- springboot项目上传头像回显
springboot项目使用ajax上传头像回显 先上效果图: 开始上传 点击提交 环境: springboot2.2.5.RELEASE jdk:1.8 thymeleaf:3.0.4.RELEAS ...
- springboot+vue实现上传头像文件到阿里云对象存储oss
在阿里云oss上创建一个bucket,获取四个信息: 编写工具类,提供对外调用四个信息的方法: //当项目一启动,就执行接口的方法,读取配置文件内容 @Component public class C ...
- 上传头像并回显(SpringBoot)
以前经常写上传头像功能,上传头像完回显出来,通常套路是: 数据库保存文件名(自己加工过,防止重名) 然后文件路径写到前台的绝对路径.前台直接用../相对路径的方式显示出来. 但是这样有一个问题就是当我 ...
- springboot用户上传头像
用户上传头像流程 1.图片上传至服务器 @PostMapping("upload") public String uploadHeader(MultipartFile header ...
- 上传excel腾讯云服务器,使用SpringBoot上传文件到腾讯云
最近在做一个项目,涉及到腾讯云上传文件/图片到服务器,为了图方便并且提升访问速度,想着上传到腾讯云存储桶是一个不错的选择.腾讯云存储桶的创建可见我之前的文章. 当然存储桶里面不仅可以存图片,也可以存储 ...
- 用户上传头像以及BUG修改
持久层 1.sql语句的规划 上传文件的操作其实是:先将用户上传的文件保存到服务器端的某个位置,然后将保存文件的路径记录在数据库中.当后续需要使用该文件时,从数据库中读出文件的路径,即可实现在线访问该 ...
- SpringBoot-项目1-用户(注册,登录,修改密码,修改个人资料,上传头像)
1. 项目分析 在设计一款软件时,在编写代码之前,应该先分析这个项目中需要处理哪些类型的数据!例如,本项目中需要处理的数据种类有:收藏,购物车,用户,收货地址,订单,商品,商品类别. 当确定了需要处理 ...
最新文章
- lsof 查看一个进程打开哪些fd及对应的文件或套接字操作
- Ubuntu : 未找到 ‘nm-tool‘ 命令
- 【F3简介】一张图看懂FPGA-F3实例
- python123测验答案测验3_知到app数学分析3-3测验答案查询服务
- m3u8格式转换mp4软件_怎么把mkv格式转换成mp4?教你转换mkv格式的方法
- 在线数据库设计ERD-ONLINE
- 23. 变量、作用域和内存问题
- 解决Ubuntu下Sublime Text 3无法输入中文
- MySql 把B表数据插入到A表中
- unity3D跑酷游戏源码,支持安卓+IOS双端 unity2019 C#语言开发
- linux安装ping命令
- 可以在搜索中突出显示网页上的多个单词_使用片段嵌入进行文档搜索
- FileZilla打开连接后本地站点无法显示自己的本地电脑
- Noise aware learning for speech enhancement
- openwrt路由器挂载sdcard为overlay
- 社会保险费的缴费基数与缴费比例
- 文件不小心删除了怎么恢复?实用的两个小妙招
- Android中ButterKnife(黄油刀)的详细使用
- Redis数据结构:快速的Redis有哪些慢操作?
- element表格固定表头