【发布时间】:2012-07-10 13:05:07
【问题描述】:
我看到了 this 关于如何通过 Apache Commons 进行流式文件上传的漂亮指南。这让我想到数据存储在哪里?是否有必要“关闭”或“清理”该位置?
谢谢!
【问题讨论】:
标签: java jsp servlets apache-commons
我看到了 this 关于如何通过 Apache Commons 进行流式文件上传的漂亮指南。这让我想到数据存储在哪里?是否有必要“关闭”或“清理”该位置?
谢谢!
【问题讨论】:
标签: java jsp servlets apache-commons
数据存储在哪里?
我认为它没有被存储。 Streaming API 不使用 DiskFileItemFactory。但它确实使用了一个缓冲区来复制 BalusC 发布的数据。 一旦你有了上传的流,你就可以使用
long bytesCopied = Streams.copy(yourInputStream, yourOutputStream, true);
看API
【讨论】:
这是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 可能表示磁盘上的真实文件。
【讨论】:
User Guide,您将看到如何使用 DiskFileItemFactory。
它在 Java 内存中存储为 byte[]。
【讨论】: