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记得定义一下

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

}

2.引入AppConfig

java 复制代码
@Resource
private AppConfig appConfig;

3.上传文件代码

java 复制代码
@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.获取头像

java 复制代码
/**
	 * 获取用户头像
	 * @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方法

java 复制代码
//读文件,返回一个文件流
    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);
                }
            }
        }
    }
相关推荐
雨中飘荡的记忆21 分钟前
Multi-Agent + Skills + Spring AI 构建自主决策智能体
后端·spring
我叫黑大帅1 小时前
Go 语言并发编程的 “工具箱”
后端·面试·go
兆子龙1 小时前
ahooks useRequest 深度解析:一个 Hook 搞定所有请求
java·javascript
兆子龙1 小时前
React Suspense 从入门到实战:让异步加载更优雅
java·javascript
用户8356290780512 小时前
Python 实现 PowerPoint 形状动画设置
后端·python
用户908324602732 小时前
Spring Boot 缓存架构:一行配置切换 Caffeine 与 Redis,透明支持多租户隔离
后端
tyung2 小时前
zhenyi-base 开源 | Go 高性能基础库:TCP 77万 QPS,无锁队列 16ns/op
后端·go
子兮曰2 小时前
Humanizer-zh 实战:把 AI 初稿改成“能发布”的技术文章
前端·javascript·后端
桦说编程2 小时前
你的函数什么颜色?—— 深入理解异步编程的本质问题(上)
后端·性能优化·编程语言