我看到了this关于如何通过Apache Commons进行流文件上传的精彩指南。这让我想到数据存储在哪里?是否有必要“关闭”或“清理”该位置?
谢谢!
答案 0 :(得分:5)
数据存储在哪里?
我不认为它是存储的。 Streaming API不使用DiskFileItemFactory。但它确实使用缓冲区来复制数据,正如BalusC发布的那样。 获得上传流后,您可以使用
long bytesCopied = Streams.copy(yourInputStream, yourOutputStream, true);
查看API
答案 1 :(得分:3)
这是DiskFileItemFactory的javadoc。
默认的FileItemFactory实现。这个实现 创建FileItem实例,将其内容保存在内存中, 对于较小的项目,或在磁盘上的临时文件中,对于较大的项目。 内容将存储在磁盘上的大小阈值是 可配置的,就像临时文件所在的目录一样 创建
如果未另行配置,则默认配置值为 如下:
Size threshold is 10KB. Repository is the system default temp directory, as returned by System.getProperty("java.io.tmpdir").
应删除为文件项创建的临时文件 稍后的。最好的方法是使用FileCleaningTracker, 您可以在DiskFileItemFactory上设置它。但是,如果你使用 这样的跟踪器,那么你必须考虑以下内容:临时文件 一旦不再需要,它们就会自动删除。 (更多 确切地说,当File的相应实例是垃圾时 收集。)这是通过所谓的收割者线程来完成的 加载类FileCleaner时自动启动。它可能 有意义的是终止该线程,例如,如果你的网络 申请结束。请参阅"资源清理"在用户中 commons-fileupload指南。
所以,是close
和cleanup
是必要的,因为FileItem
可能表示磁盘上的真实文件。
答案 2 :(得分:2)
它作为byte[]
存储在Java内存中。