ImageIO.read(InputStream)返回null问题
问题背景
在上传图片的时候,ImageIO.read(InputStream)能够正常读取图片,代码如下
//org.springframework.web.multipart.MultipartFile uploadFile
InputStream input = uploadFile.getInputStream();
BufferedImage source = ImageIO.read(input);
PS:这里可以直接使用ImageIO.read(file),但是由于图片压缩我们封装了一层,只支持InputStream的入参
但是使用File文件的时候,却返回null。文件确实是图像文件,并且能够正常读取
InputStream input = new FileInputStream(file)
BufferedImage source = ImageIO.read(input);
原因和解决方案
Returns a BufferedImage as the result of decoding a supplied InputStream with an ImageReader chosen automatically from among those currently registered. The InputStream is wrapped in an ImageInputStream. If no registered ImageReader claims to be able to read the resulting stream, null is returned.
原因在于ImageIO.read是根据文件的类型来读取图片的,使用了FileInputStream后仅仅获取了文件的字节码,并不包含文件的信息,因而返回null。其中ImageReader负责读取InputStream,如果没有注册的ImageReader声称能够读取结果流,则返回null
解决方案:修改入参,同时支持File和InputStream入参