2017-05-05 33 views
0

我有一個要求,保持文件在內存中,直到它擊中動作類,永遠不會將文件寫入磁盤。如果文件在磁盤上駐留幾秒鐘,則可能會發生文件上傳到的服務器上的某些漏洞。我覺得Struts2框架是爲一個解決方案設置的,只是將文件臨時存儲到磁盤。這是一個正確的假設,還是我錯過了一件非常簡單的事情?是否有可能使用Struts 2文件上傳來不創建臨時文件?

回答

0

因爲它有一些利益,所以我可以關閉這個問題,我想分享我是如何完成將臨時保存的文件臨時保存到磁盤的。

首先,我的業務同意要上傳文件的合理上限大小,並且一次只允許上傳一個文件。由於沒有這個協議,我下面列出的解決方案將不起作用。

我使用了struts的插件功能。我基於JarkartaMultiPartRequest類創建了自己的MutiPartRequest插件和類。我評論了所有對文件系統的寫入。設置最大文件大小爲10MB。將解析器中的sizeThreshold設置爲大於10MB。通過將sizeThreshold設置爲大於maxSize,它會在內存中創建一個保存上載文件的整個字節數組的項目。然後我在http請求中創建了一個自定義屬性來保存我在內存中的字節數組,以便我可以在動作類中訪問它。沒有其他方法可以找到字節數組。

還有一些我不得不做的清理項目,但總的來說這種方法似乎運作良好。

0

我能想到的一種方法是將struts.multipart.saveDir設置爲文件系統上的某個目錄(例如子目錄/tmp),並將該目錄掛載爲內存支持的存儲。這將確保沒有任何東西會駐留在磁盤上。

然而,儘管文件系統是內存支持的,但它的一部分可能會通過一些低級操作系統機制(例如,分頁)寫入磁盤。但是,對於存儲在內存中的任何內容都是如此,而不僅僅是內存支持的文件系統。如果此存儲必須完全保留在內存中並且從未分頁,則需要更具創意,並確保文件系統支持的內存始終爲「常駐」。

+0

非常有創意的方式來滿足不存儲在磁盤上的要求。問題是,如果它看起來像一個文件,並可以像文件一樣訪問,那麼這不會通過。 –

相關問題