本文主要是介绍上传文件,org.springframework.web.multipart.MultipartFile 为何可重复读(重复获取getInputStream()),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题引出:
我们知道有些流是可以读一次,有些可以重复读:原理参看java io流可重复读与不可重复读_GOODDEEP-CSDN博客
debug发现,在上传文件时的MultipartFile 实例的实现类为org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.StandardMultipartFile
part实例的实现类为org.apache.catalina.core.ApplicationPart
org.apache.tomcat.util.http.fileupload.disk.DiskFileItem的getInputStream的实现方法如下,默认
isInMemory()=false;
所以每次getInputStream()获得的都是new FileInputStream()对象;
所以在代码中若使用MultipartFile.getInputStream()获得流对象时要注意close();
可以使用:try-with-resource语句如下:jvm 会在编译时自动添加close语句,bf.close()会调用FileInputStream对象的close().
上传的临时文件何时删除:
经测试发现,当前的request请求响应完成后,就会自动删除临时文件,具体对不对,后面有时间再看吧。
这篇关于上传文件,org.springframework.web.multipart.MultipartFile 为何可重复读(重复获取getInputStream())的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!