2012-07-11 42 views

回答

5

数据存储在哪里?

我不认为它被存储。 Streaming API不使用DiskFileItemFactory。但是它确实使用了一个缓冲区来复制BalusC发布的数据。 一旦你上载流,你可以在API

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可能表示磁盘上的真实文件。

+0

使用

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

看起来是正确的我,如果我错了,但流API不使用任何DiskFileItemFactory对象。或者暗示其用途? – user571099 2012-07-11 00:39:44

+0

@ user571099。如果您按照问题中的链接并单击该页面顶部的“用户指南”,您将看到如何使用DiskFileItemFactory。 – 2012-07-11 01:28:04

+0

@Alexander Pogrebnyak,我认为user571099是正确的。用户指南是指文件上传的传统方法(通常文件上传的非流式方式),它需要超过阈值大小的文件的临时文件夹。这些文件需要删除,收割线程就是为了这个目的。而在流api中,我们不使用Stream API中的DiskFileItem,您可以看到示例用法,它不使用DiskFileItemFactory。为了回答原始问题,数据以字节[]的形式存储在内存中,是的,您需要关闭InputStream。接受的答案是正确的。 – 2015-09-09 19:30:36

2

它被存储为Java内存中的byte[]

相关问题