我们有一个内容管理系统,允许我们的用户存储通过 REST 网络服务上传的文件。在将这些文件存储到存储库之前,它们的内容已加密。
检索这些文件时,文件内容被解密,并放入一个字节数组中。目的是将这些内容作为文件附件传递回客户端,客户端可以将其存储在本地计算机上。
为此,我目前将内容存储到一个临时文件中,并将该临时文件作为附件传回。这种方法有一个令人讨厌的副作用,即以前加密的存储库文件被“明文”存储在临时目录中。
我知道我可以将临时文件设置为在 JVM 结束时自动删除,但由于这是服务器,服务器重启之间可能需要很长时间。
我也可以(我猜)设置某种监听器作业来定期检查临时目录并删除超过特定时间的文件,但这看起来很麻烦而且并没有真正解决问题 - 它只是缩短了曝光时间.
我正在寻找避免临时文件的替代方法,但仍允许用户通过 Web 服务将文件(最好在内存中)下载为附件。
有什么想法吗?
谢谢!
最佳答案
好吧,我猜你可以将数据存储在 Java 对象中,例如HashMap 并将其用作缓存(使用弱引用,以便在垃圾收集器决定执行此操作时缓存可以收集垃圾)。如果这意味着对正在使用的堆的数量造成可怕的后果,那么您可以考虑运行 memcache 或 Java 等价物,例如ehcache 将您的对象存储在 JVM 堆之外。
您是否有理由不能将结果流式传输回来,以便在完成后由 JVM 清理?
关于java - 临时的,在内存中,Java 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374247/