java - 临时的,在内存中,Java 中的文件

标签 java web-services rest content-management

我们有一个内容管理系统,允许我们的用户存储通过 REST 网络服务上传的文件。在将这些文件存储到存储库之前,它们的内容已加密。

检索这些文件时,文件内容被解密,并放入一个字节数组中。目的是将这些内容作为文件附件传递回客户端,客户端可以将其存储在本地计算机上。

为此,我目前将内容存储到一个临时文件中,并将该临时文件作为附件传回。这种方法有一个令人讨厌的副作用,即以前加密的存储库文件被“明文”存储在临时目录中。

我知道我可以将临时文件设置为在 JVM 结束时自动删除,但由于这是服务器,服务器重启之间可能需要很长时间。

我也可以(我猜)设置某种监听器作业来定期检查临时目录并删除超过特定时间的文件,但这看起来很麻烦而且并没有真正解决问题 - 它只是缩短了曝光时间.

我正在寻找避免临时文件的替代方法,但仍允许用户通过 Web 服务将文件(最好在内存中)下载为附件。

有什么想法吗?

谢谢!

最佳答案

好吧,我猜你可以将数据存储在 Java 对象中,例如HashMap 并将其用作缓存(使用弱引用,以便在垃圾收集器决定执行此操作时缓存可以收集垃圾)。如果这意味着对正在使用的堆的数量造成可怕的后果,那么您可以考虑运行 memcache 或 Java 等价物,例如ehcache 将您的对象存储在 JVM 堆之外。

您是否有理由不能将结果流式传输回来,以便在完成后由 JVM 清理?

关于java - 临时的,在内存中,Java 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374247/

相关文章:

java - JRException : java. lang.ClassCastException : java. lang.String 无法转换为 java.lang.Boolean

node.js - Express CORS域名白名单

java - Linkedin - REST API 想要使用 java 1.2 共享网络更新无法使用 scribe 或其他库

angular - Angular 4 中的并行 HTTP 请求

java - Android中checkbox和checkedtextview的区别? RecyclerView 使用哪个?

java - 为什么小程序在调整到我指定的大小之前会以默认大小启动?

java - 从 Android 4.0 降级到 Android 2.2 会产生很多问题

java - 按需清空 Hibernate 缓存

android - 如何在 Android 错误中允许 SSL URL(无对等证书)

java - codeigniter 中的 PHP 和 Java 集成