SpringBoot实现上传头像(查看头像)

SpringBoot实现上传头像给功能和查看头像功能

文章目录

目录

文章目录

1.上传头像

1.这里的AppConfig记得定义一下

  2.引入AppConfig

3.上传文件代码

 2.获取头像

 1.实现readFile方法


1.上传头像

  1. 首先我的代码中在application.properties中设置了上传文件的根目录
project.folder=F:/a-xxxxxxxxxxxxxxxxx/java/yunxipan_java/easypan

通过AppConfig获取到上传文件根目录

1.这里的AppConfig记得定义一下

@Component("appConfig")
public class AppConfig {//获取application.properties定义的根目录@Value("${project.folder:}")private String projectFolder;public String getProjectFolder() {return projectFolder;}}

  2.引入AppConfig

@Resource
private AppConfig appConfig;

3.上传文件代码

@RequestMapping("/updateUserAvatar")public ResponseVO updateUserAvatar(HttpSession session, MultipartFile avatar){SessionWebUserDto webUserDto = getUserInfoFromSession(session);String baseFolder = appConfig.getProjectFolder()+Constants.FILE_FOLDER_FILE;File targetFileFolder = new File(baseFolder+Constants.FILE_FOLDER_AVATAR_NAME);File targetFile = new File(targetFileFolder.getPath()+"/"+webUserDto.getUserId()+Constants.AVATAR_SUFFIX);if(!targetFileFolder.exists()){targetFileFolder.mkdirs();}try {avatar.transferTo(targetFile);} catch (Exception e) {logger.error("上传头像失败",e);}return getSuccessResponseVO(null);}
//我这边用到的是Session来记录用户登录信息的,当然你也可以使用别的方式,这里的大概内容是这样,(别的方式的话)自行实现一下就好,逻辑也差不多

 2.获取头像

/*** 获取用户头像* @param session* @param userId* @return*/@RequestMapping("/getAvatar/{userId}")@GlobalInterceptor(checkParams = true)public void getAvatar(HttpServletResponse response,HttpSession session, @VerifyParam(required = true) @PathVariable("userId") String userId){//定义头像存放的根目录String avatarFolderName = Constants.FILE_FOLDER_FILE + Constants.FILE_FOLDER_AVATAR_NAME;//如果这个目录不存在的话创建这个目录File folder = new File(appConfig.getProjectFolder()+avatarFolderName);if(!folder.exists()){folder.mkdirs();}//定义头像存放的具体位置String avatarPath = appConfig.getProjectFolder()+avatarFolderName+userId+Constants.AVATAR_SUFFIX;File file = new File(avatarPath);//如果头像不存在的话,输出一个默认的头像if(!file.exists()){//如果说默认头像不存在的话if(!new File(appConfig.getProjectFolder() + avatarFolderName+Constants.AVATAR_DEFAULT).exists()){printNoDefaultImage(response);}avatarPath = appConfig.getProjectFolder()+avatarFolderName+Constants.AVATAR_DEFAULT;response.setContentType("image/jpg");readFile(response,avatarPath);}}

 1.实现readFile方法

//读文件,返回一个文件流protected void readFile(HttpServletResponse response,String filePath){//如果文件路径不合法,则直接返回if(!StringTools.pathIsOk(filePath)){return;}OutputStream out = null;FileInputStream in = null;try {File file = new File(filePath);// 如果文件不存在,则直接返回if (!file.exists()) {return;}in = new FileInputStream(file);  // 打开文件输入流byte[] byteData = new byte[1024];  // 定义缓冲区out = response.getOutputStream();  // 获取响应输出流int len = 0;// 读取文件并写入响应输出流while ((len = in.read(byteData)) != -1) {out.write(byteData, 0, len);}out.flush();} catch (Exception e) {logger.error("读取文件异常", e);} finally {//关闭输出流if(out != null){try {out.close();} catch (IOException e) {logger.error("IO异常",e);}}//关闭输入流if(in != null ){try{in.close();}catch (IOException e){logger.error("IO异常", e);}}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1310. 子数组异或查询 异或 前缀和 python

有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li1] xor ... xor arr[Ri])作为本次查询的结果。 并返回一…

CPASSOC代码详解

加载环境 library("MASS") require(MASS) # Modern Applied Statistics with S,"S"指的是S语言,由贝尔实验室的约翰钱伯斯(John Chambers)等人开发。S语言是R语言的前身,许多R语言的语法和功能都…

《精通ChatGPT:从入门到大师的Prompt指南》附录B:推荐阅读资源

作者:斯图尔特拉塞尔 (Stuart Russell) 和 彼得诺维格 (Peter Norvig) 简介:这本书被誉为人工智能领域的经典教材,内容涵盖了AI的基本原理、算法及其应用。无论是入门者还是专业研究者,都能从中获得启发。 2. 《深度学习》 作者…

【目标跟踪网络训练 Market-1501 数据集】DeepSort 训练自己的跟踪网络模型

前言 Deepsort之所以可以大量避免IDSwitch,是因为Deepsort算法中特征提取网络可以将目标检测框中的特征提取出来并保存,在目标被遮挡后又从新出现后,利用前后的特征对比可以将遮挡的后又出现的目标和遮挡之前的追踪的目标重新找到&#xff0…

企业网页制作

随着互联网的普及,企业网站已成为企业展示自己形象、吸引潜在客户、开拓新市场的重要方式。而企业网页制作则是构建企业网站的基础工作,它的质量和效率对于企业网站的成败至关重要。 首先,企业网页制作需要根据企业的特点和需求进行规划。在网…

前端 移动端 手机调试 (超简单,超有效 !)

背景:webpack工具构建下的vue项目 1. 找出电脑的ipv4地址 2. 替换 host 3. 手机连接电脑热点或者同一个wifi 。浏览器打开链接即可。

Spring运维之业务层测试数据回滚以及设置测试的随机用例

业务层测试数据回滚 我们之前在写dao层 测试的时候 如果执行到这边的代码 会在数据库 里面留下数据 运行一次留一次数据 开发有开发数据库,运行有运行数据库 我们先连数据库 在pom文件里引入mysql的驱动和mybatis-plus的依赖 在数据层写接口 用mybatis-plus进…

浅谈JDBC

文章目录 一、什么是 JDBC?二、JDBC 操作流程三、JDBC代码例子 一、什么是 JDBC? JDBC是一种可用于执行SQL语句的JAVA API,是链接数据库和JAVA应用程序的纽带。JDBC一般需要进行3个步骤:与数据库建立一个链接、向数据库发送SQL语…

当AGI能够自我复制并传播到任意电脑时,会怎样?

当人工通用智能(AGI)具备自我复制能力,并能够传播到任何一台计算机作为宿主机时,这种情景可能带来一系列深远的影响和挑战。以下是一些潜在的影响和可能的结果: 1. 安全威胁与恶意利用 AGI的自我复制和传播能力可能被…

openh264 场景变化检测算法源码分析

文件位置 openh264/codec/processing/scenechangedetection/SceneChangeDetection.cppopenh264/codec/processing/scenechangedetection/SceneChangeDetection.h 代码流程 说明: 通过代码流程分析,当METHOD_SCENE_CHANGE_DETECTION_SCREEN场景类型为时…

Web前端工资调整:深入剖析与全面解读

Web前端工资调整:深入剖析与全面解读 在快速发展的互联网行业中,Web前端技术日新月异,而与之紧密相关的工资调整也成为了业内热议的话题。本文将从四个方面、五个方面、六个方面和七个方面,深入剖析Web前端工资调整的原因、趋势、…

Linux -- 了解 vim

目录 vim Linux 怎么编写代码? 了解 vim 的模式 什么是命令模式? 命令模式下 vim 的快捷键: 光标定位: 复制粘贴: 删除及撤销: 注释代码: 什么是底行模式? ​编辑 ​编辑…

Java:111-SpringMVC的底层原理(中篇)

这里续写上一章博客(110章博客): 现在我们来学习一下高级的技术,前面的mvc知识,我们基本可以在67章博客及其后面相关的博客可以学习到,现在开始学习精髓: Spring MVC 高级技术: …

输入与随机数

Java的两个类库 输入 如何实现键盘输入?我们需要了解到Scanner这个类,其作用于及键盘输入。 类库:java.util 如何使用?分为3步走: 导入包(一般idea会帮做) import java.util.Scanner;创建对…

Java学习日志26:Double.NEGATIVE_INFINITY与Double.MIN_VALUE的区别

Double.NEGATIVE_INFINITY 和 Double.MIN_VALUE 都是 Java 中 Double 类的静态成员,但它们表示的含义不同。 Double.NEGATIVE_INFINITY 表示双精度浮点数的负无穷大。它是一个特殊的数值,在数值计算中通常用于表示一些特殊情况,比如除以零的…

Large-Scale LiDAR Consistent Mapping usingHierarchical LiDAR Bundle Adjustment

1. 代码地址 GitHub - hku-mars/HBA: [RAL 2023] A globally consistent LiDAR map optimization module 2. 摘要 重建精确一致的大规模激光雷达点云地图对于机器人应用至关重要。现有的基于位姿图优化的解决方案,尽管它在时间方面是有效的,但不能直接…

ubuntu使用docker安装openwrt

系统:ubuntu24.04 架构:x86 1. 安装docker 1.1 离线安装 docker下载地址 根据系统版本,依次下载最新的三个关于docker的软件包 container.io(注意后缀版本顺序)docker-ce-clidocker-ce 然后再ubuntu系统中依次按顺…

【召回第一篇】召回方法综述

各个网站上找的各位大神的优秀回答,记录再此。 首先是石塔西大佬的回答:工业界推荐系统中有哪些召回策略? 万变不离其宗:用统一框架理解向量化召回前言常读我的文章的同学会注意到,我一直强调、推崇,不要…

多种策略提升线上 tensorflow 模型推理速度

前言 本文以最常见的模型 Bi-LSTM-CRF 为例,总结了在实际工作中能有效提升在 CPU/GPU 上的推理速度的若干方法,包括优化模型结构,优化超参数,使用 onnx 框架等。当然如果你有充足的 GPU ,结合以上方法提升推理速度的效…

真空衰变,真正的宇宙级灾难,它到底有多可怕?

真空衰变,真正的宇宙级灾难,它到底有多可怕? 真空衰变 真空衰变(Vacuum decay)是物理学家根据量子场论推测出的一种宇宙中可能会发生的现象,这种现象被称为真正的宇宙级灾难,它到底有多可怕呢…