Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的临时、内存中的文件_Java_Web Services_Rest_Content Management - Fatal编程技术网

Java中的临时、内存中的文件

Java中的临时、内存中的文件,java,web-services,rest,content-management,Java,Web Services,Rest,Content Management,我们有一个内容管理系统,允许用户存储通过RESTWeb服务上传的文件。在将这些文件存储在存储库中之前,其内容将被加密 检索这些文件时,将对文件内容进行解密,并将其放入字节数组中。目的是将这些内容作为文件附件传递回客户机,客户机可以将其存储在本地计算机上 为此,我目前正在将内容存储到一个临时文件中,并将临时文件作为附件传回。这种方法有一个令人讨厌的副作用,就是以前加密的存储库文件被存储在临时目录的“clear”中 我知道我可以在JVM结束时将临时文件设置为自动删除,但由于这是一个服务器,服务器重启

我们有一个内容管理系统,允许用户存储通过RESTWeb服务上传的文件。在将这些文件存储在存储库中之前,其内容将被加密

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

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

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

我也可以(我猜)设置某种侦听器工作,定期检查临时目录并删除超过一定时间的文件,但这似乎很麻烦,并不能真正解决问题——它只是缩短了曝光时间

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

有什么想法吗


谢谢

流是一种选择吗?缺点是您将所有内容都存储在内存中。

是否有任何原因需要将文件对象传回,或者这是您可以更改的内容


我问的原因是,你可以创建一个接口,它有一些方法,比如
getName()
getContentStream()
等等,然后把它传回去,而不是一个具体的文件对象。

我想你可以将数据存储在Java对象中,例如HashMap,并将其用作缓存(使用弱引用,以便在垃圾收集器决定这样做时,缓存可以被垃圾收集)。如果这意味着堆使用量的严重后果,那么您可以考虑运行memcache或Java等效程序,例如ehcache,将对象存储在远离JVM堆的地方


有什么原因不能将结果流式传输回来,这样当结果完成时,JVM就会将其清理干净?

您可以查看一件事,而不是查看一个文件,即在完成解密后删除该文件


此外,您可以将加密文件作为blob存储在数据库中,然后作为流检索。然后您应该能够动态解密它。

您是否可以保留对clear temp文件的引用,并在加密完成后立即将其删除?也许可以描述更多与此相关的过程,如文件创建的过程ion?

不要使用deleteOnExit-它只对开发有用。它会在整个JVM停止之前泄漏文件名。这是我希望做的,但不知道如何通过Http响应将结果传回来。这可能吗?FWIW我正在使用Restlet作为我的REST WS框架。这就是我希望做的(使用streams),但不知道如何通过Http响应将结果传回来。这可能吗?FWIW我使用Restlet作为我的REST WS框架。我想您只需要得到Http响应。getOutputStream();写入它,然后刷新它。这就像将字节流式传输到HttpServletRespose输出流一样简单?也许我想得太多了……谢谢,您只需要一个FileInputStream来读取您的文件,然后将该流写入HTTP响应的OutputStream。让我们知道您进展如何。