通过Apache Commons上传流文件期间存储的数据在哪里?

时间:2012-07-11 00:03:16

标签: java jsp servlets apache-commons

我看到了this关于如何通过Apache Commons进行流文件上传的精彩指南。这让我想到数据存储在哪里?是否有必要“关闭”或“清理”该位置?

谢谢!

3 个答案:

答案 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指南。

所以,是closecleanup是必要的,因为FileItem可能表示磁盘上的真实文件。

答案 2 :(得分:2)

它作为byte[]存储在Java内存中。