Java 是否可以使用Struts 2文件上载来不创建临时文件?

Java 是否可以使用Struts 2文件上载来不创建临时文件?,java,struts2,apache-commons-fileupload,Java,Struts2,Apache Commons Fileupload,我需要将文件保存在内存中,直到它到达action类,并且永远不要将文件写入磁盘。如果文件仅驻留在磁盘上几秒钟,则可能会在上载到的服务器上发生攻击。我觉得Struts2框架只针对一种解决方案进行了设置,即将文件临时存储到磁盘。这是一个正确的假设,还是我遗漏了一些非常简单的东西 我能想到的一种方法是将struts.multipart.saveDir设置到文件系统上的一个目录(例如/tmp的子目录),并将该目录作为内存支持的存储装载。这将确保磁盘上不会有任何内容 然而,有一个小小的警告:即使文件系统是

我需要将文件保存在内存中,直到它到达action类,并且永远不要将文件写入磁盘。如果文件仅驻留在磁盘上几秒钟,则可能会在上载到的服务器上发生攻击。我觉得Struts2框架只针对一种解决方案进行了设置,即将文件临时存储到磁盘。这是一个正确的假设,还是我遗漏了一些非常简单的东西

我能想到的一种方法是将
struts.multipart.saveDir
设置到文件系统上的一个目录(例如
/tmp
的子目录),并将该目录作为内存支持的存储装载。这将确保磁盘上不会有任何内容


然而,有一个小小的警告:即使文件系统是内存备份的,它的一部分也可能通过一些低级操作系统机制(例如分页)写入磁盘。然而,对于存储在内存中的任何东西都是如此,而不仅仅是内存支持的文件系统。如果此存储必须完全保留在内存中,甚至从不分页,则您需要更具创造性,并确保文件系统支持的内存始终是“驻留的”。

如果有兴趣,我可以结束此问题,我想与大家分享我是如何做到不将上传的文件临时保存到磁盘的

首先,我让业务部门同意上传文件的合理最大大小,并且一次只允许上传一个文件。如果没有这个协议,我下面概述的解决方案将不起作用

我利用了struts的一个插件特性。我基于JarkataMultiPartRequest类创建了自己的MutiPartRequest插件和类。我注释掉了对文件系统的所有写入。将最大文件大小设置为10MB。将解析器中的sizeThreshold设置为略大于10MB。通过将sizeThreshold设置为大于maxSize,它在内存中创建了一个项目,其中包含上载文件的整个字节数组。然后,我在http请求中创建了一个自定义属性来保存内存中的字节数组,以便在action类中访问它。我找不到其他方法来获取字节数组


我还需要做一些其他的清理工作,但总的来说,这种方法似乎工作得很好。

这是一种非常有创意的方法,可以满足不存储在磁盘上的要求。问题是,如果它看起来像一个文件,并且可以像文件一样访问,那么这将不会通过。