5

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

谢谢!

4

3 回答 3

5

数据存储在哪里?

我不认为它被存储。Streaming API 不使用 DiskFileItemFactory。但它确实使用了一个缓冲区来复制 BalusC 发布的数据。获得上传流后,您可以使用

long bytesCopied = Streams.copy(yourInputStream, yourOutputStream, true);  

看看API

于 2012-07-11T01:37:08.237 回答
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 的相应实例被垃圾回收时。)这是由所谓的 reaper 线程完成的,它在加载 FileCleaner 类时自动启动。例如,如果您的 Web 应用程序结束,终止该线程可能是有意义的。请参阅 commons-fileupload 的用户指南中的“资源清理”部分。

所以,是的close并且cleanup是必要的,因为它FileItem可能表示磁盘上的真实文件。

于 2012-07-11T00:18:45.060 回答
2

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

于 2012-07-11T01:02:12.673 回答