SpringBoot版本:2.7.6
错误原因
在使用SpringBoot MultipartFile上传文件到腾讯云对象存储时,使用多线程进行上传处理,在新开辟的线程中使用MultipartFile.getInputStream()时抛出了FileNotFoundException,原因是找不到SpringBoot的临时存储文件
解决方法
在Controller层拿到MultipartFile之后立即获取一次InputStream
产生原因
MultipartFile在获取InputStream时会进行一次判断,如果数据已经存在在内存中,会直接返回ByteArrayInputStream,如果不在内存中,则返回FileInputStream,如果在一开始没有获取InputStream,这时数据以临时文件的方式存储在磁盘上,之后会被操作系统清除,此时再获取InputStream,且内存中没有数据时就会抛出FileNotFoundException,当我们在操作系统没有清除临时文件时立即获取一次InputStream,数据会被缓存到内存中,之后再获取InputStream即可直接拿到ByteArrayInputStream