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);
                }
            }
        }
    }
相关推荐
青云交9 分钟前
Java 大视界 -- Java 大数据在智能交通智能停车诱导与车位共享中的应用
java·智能停车·故障预测·极端气候适配·车位共享·民生应用·政企协同
從南走到北11 分钟前
JAVA代驾小程序源码代驾跑腿APP源码
java·开发语言·微信·微信小程序·小程序
李贺梖梖21 分钟前
day01 Java概述、IDEA安装、Java基础语法
java
urkay-25 分钟前
Android getDrawingCache 过时废弃
android·java·开发语言·kotlin·iphone·androidx
CoderYanger31 分钟前
C.滑动窗口-求子数组个数-越短越合法——3258. 统计满足 K 约束的子字符串数量 I
java·开发语言·算法·leetcode·1024程序员节
张较瘦_32 分钟前
Spring Boot | 学习Spring Boot 3要有哪些Java基础?
java·spring boot·学习
X***C86237 分钟前
JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)
java·tomcat
阿宁又菜又爱玩1 小时前
Mybatis学习
java·学习·mybatis
幽络源小助理1 小时前
《已调试》SpringBoot景区寄存管理系统源码 - 免费JavaWeb项目下载 | 幽络源
java·开发语言·spring boot
脸大是真的好~1 小时前
尚硅谷-索引优化以及查询优化
java