- 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) {
// 省略异常操作
}
- MultipartFile直接获取
通过源码可以看到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能够被正常存储(已测试)。