通过MultipartFile获取图片宽高

  1. MultipartFile转File再获取
        MultipartFile multipartFile = uploadReq.getFile(); // 获取请求传过来的MultipartFile
        String fileName = multipartFile.getOriginalFilename();
        String prefix=fileName.substring(fileName.lastIndexOf("."));
        try {
            File file = File.createTempFile(prefix, String.valueOf(System.currentTimeMillis())); // 创建临时文件
            FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);
            BufferedImage bufferedImage =ImageIO.read(file); // 通过临时文件获取图片流
            if (bufferedImage == null) {
                // 证明上传的文件不是图片,获取图片流失败,不进行下面的操作
            }
            Integer width = bufferedImage.getWidth(); // 通过图片流获取图片宽度
            Integer height = bufferedImage.getHeight(); // 通过图片流获取图片高度
            // 省略逻辑判断
        } catch (Exception e) {
            // 省略异常操作
        }
  1. MultipartFile直接获取
    通过MultipartFile获取图片宽高_第1张图片
    通过MultipartFile获取图片宽高_第2张图片

通过源码可以看到ImageIO.read()除了通过File获取BufferedImage之外,也提供了通过InputStream来获取BufferedImage的方法,而MultipartFile本身也可以获取到InputStream。
于是有如下方法获取到文件的宽高:

        MultipartFile multipartFile = uploadReq.getFile(); // 获取请求传过来的MultipartFile
        try {
            BufferedImage bufferedImage =ImageIO.read(multipartFile.getInputStream()); // 通过MultipartFile得到InputStream,从而得到BufferedImage
            if (bufferedImage == null) {
                // 证明上传的文件不是图片,获取图片流失败,不进行下面的操作
            }
            Integer width = bufferedImage.getWidth();
            Integer height = bufferedImage.getHeight();
           // 省略逻辑判断
        } catch (Exception e) {
            // 省略异常操作
        }

注:json获取到InputStream并被消费之后貌似会出现流不能再次使用的情况,导致数据无法存储。但是此处MultipartFile获取到流并消费(即通过这个流获取到了宽高)后,MultipartFile能够被正常存储(已测试)。

你可能感兴趣的:(java)