记hutool包工具类FileTypeUtil的一个bug

背景描述 :

当我们要判断文件的真实类型时,可以使用hutool提供的工具类FileTypeUtil.getType(InputStream in)是一个不错的方法,可以直接获取绝大多数主流文件类型:
我们看其中原理,它读取了流的头部编码,根据编码转为对应文件类型
如图


image.png

问题

当我们判断好这个文件类型之后,往往需要继续拿流进行处理,比如使用文件存储服务上传这个文件。如

image.png

同个inputStream
先用于判断是什么类型,然后推到oss服务。
这个时候问题出现了,inputStream经过
FileTypeUtil.getType(inputStream) 之后,发送了变化,直接推到oss上就无法显示了。


image.png

如果你观察inputStream经过FileTypeUtil.getType(inputStream) 前后,确实已经发生变化。
打开调式模式,连续调用FileTypeUtil.getType(inputStream)两次,第二次是无法再获取inputStream的文件类型的,返回的是null。

处理:

找到问题,处理思路也很简单了。
FileTypeUtil.getType(inputStream)经过之后输入流会变化,那么要么复制一份输入流,
要么就只能通过其他方式去获取,保证最终推流时不影响inputStream。

补充一点,获取远程文件的inputStream,可以直接用
InputStream inputStream = new URL(url).openStream(); 即可

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容