springboot用户上传头像

用户上传头像流程
在这里插入图片描述

1.图片上传至服务器

@PostMapping("upload")
public String uploadHeader(MultipartFile headerImage, Model model) {
    //判断图片是否为空
    if (headerImage == null) {
        model.addAttribute("error", "请先上传图片!");
        return "/site/setting";
    }
    //判断图片是否合法
    String fileName = headerImage.getOriginalFilename();
    String suffix = fileName.substring(fileName.lastIndexOf("."));
    if (!suffix.equals(".png") && !suffix.equals(".jpg") && !suffix.equals(".jpeg")) {
        model.addAttribute("error", "请上传png/jpg/jpeg格式的图片文件!");
        return "/site/setting";
    }
    //生成随机文件名
    fileName = CommunityUtil.generateUUID() + suffix;
    //确定文件存放路径
    File dest = new File(headerPath + "/" + fileName);
    //存储文件
    try {
        headerImage.transferTo(dest);
    } catch (IOException e) {
        logger.error("文件存储失败" + e.getMessage());
        throw new RuntimeException("文件存储失败,服务器异常", e);
    }
	//更新hostHoler中的url
    User user = hostHolder.getUser();
    /*
    domain:服务器地址
    */
    String headerUrl = domain + contextPath + "/user/header/" + fileName;
    //更新数据库中的url
    userService.updateUserHeader(user.getId(), headerUrl);
    return "redirect:/index";
}

MultipartFile :

  • getName() 返回参数的名称
  • getOriginalFilename()获取源文件的昵称
  • getContentType() 返回文件的内容类型
  • isEmpty() 判断是否为空,或者上传的文件是否有内容
  • getSize() 返回文件大小 以字节为单位
  • getBytes() 将文件内容转化成一个byte[] 返回
  • getInputStream() 返回InputStream读取文件的内容
  • transferTo(File dest) 用来把 MultipartFile 转换换成 File

2.解析url

@GetMapping("/header/{fileName}")
public void getHeader(@PathVariable("fileName") String fileName, HttpServletResponse response) {
    //找到服务器存放路径
    fileName = headerPath + "/" + fileName;
    //解析文件后缀
    String suffix = fileName.substring(fileName.lastIndexOf("."));
    //响应的格式
    response.setContentType("image/" + suffix);

    try (FileInputStream stream = new FileInputStream(fileName);
         ServletOutputStream os = response.getOutputStream();) {
        byte[] buffer = new byte[1024];
        int b = 0;
        while ((b = stream.read(buffer)) != -1) {
            os.write(buffer, 0, b);
        }
    } catch (IOException e) {
        logger.error("读取头像失败", e);
    }
}

从url中解析出图片在服务器中存储的位置,将其转化为字节流,创建buffer(缓冲区)将二进制图片通过response上传至客户端(-1时代表结束)。
read:Reads up to b.length bytes of data from this input stream into an array of bytes.
write:Writes len bytes from the specified byte array starting at offset off to this output stream.

字节流和字符流

  • 字节流:
    – 将文件转化为二进制字节进行输入输出(图片,声音,文件等在硬盘上存储的文件)。
  • 字符流
    – 对缓冲区进行操作,一般是用来对字符,字符串等进行传输。
    点击看gitee源码!
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Spring Boot中实现用户头像上传和信息保存可以通过以下步骤实现: 1. 前端页面:创建一个用户信息编辑页面,该页面包含一个文件上传控件和其他用户信息输入框,用户可以选择并上传头像图片,同时输入其他的用户信息。 2. 控制器层:创建一个控制器用于处理用户信息和头像上传请求。在该控制器中,配置一个POST请求的映射路径,接收前端页面传来的用户信息和头像图片文件。使用@RequestPart注解接收文件,使用@ModelAttribute注解接收其他用户信息。 3. 服务层:创建一个服务类用于保存用户信息和头像文件。在该服务类中,可以使用Spring Boot的MultipartFile类来处理上传的文件。可以使用File类创建一个唯一的文件名,用于保存用户头像文件。将文件保存到服务器的指定位置。 4. 数据库交互:在保存用户信息时,可以使用Spring Data JPA来操作数据库。可以创建一个用户实体类和一个对应的Repository接口,用于对用户数据进行增删改查的操作。在保存用户信息时,将用户信息保存到数据库表中。 5. 前端展示:用户头像上传成功后,可以将头像显示到用户信息编辑页面上供用户预览。同时可以将用户头像的URL保存到用户信息表中,用于在其他页面展示用户头像。 6. 其他功能:可以为用户提供修改头像的功能,在用户个人中心或者其他页面上提供用户头像的修改入口。用户可以重新选择并上传新的头像图片,同时更新数据库中的用户头像URL。 通过以上步骤,就能够在Java Spring Boot中实现用户头像上传和信息保存的功能。整个过程中需要注意文件的上传和保存路径的配置,以及与数据库进行交互的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值