我有一個要求,保持文件在內存中,直到它擊中動作類,永遠不會將文件寫入磁盤。如果文件在磁盤上駐留幾秒鐘,則可能會發生文件上傳到的服務器上的某些漏洞。我覺得Struts2框架是爲一個解決方案設置的,只是將文件臨時存儲到磁盤。這是一個正確的假設,還是我錯過了一件非常簡單的事情?是否有可能使用Struts 2文件上傳來不創建臨時文件?
0
A
回答
0
因爲它有一些利益,所以我可以關閉這個問題,我想分享我是如何完成將臨時保存的文件臨時保存到磁盤的。
首先,我的業務同意要上傳文件的合理上限大小,並且一次只允許上傳一個文件。由於沒有這個協議,我下面列出的解決方案將不起作用。
我使用了struts的插件功能。我基於JarkartaMultiPartRequest類創建了自己的MutiPartRequest插件和類。我評論了所有對文件系統的寫入。設置最大文件大小爲10MB。將解析器中的sizeThreshold設置爲大於10MB。通過將sizeThreshold設置爲大於maxSize,它會在內存中創建一個保存上載文件的整個字節數組的項目。然後我在http請求中創建了一個自定義屬性來保存我在內存中的字節數組,以便我可以在動作類中訪問它。沒有其他方法可以找到字節數組。
還有一些我不得不做的清理項目,但總的來說這種方法似乎運作良好。
0
我能想到的一種方法是將struts.multipart.saveDir
設置爲文件系統上的某個目錄(例如子目錄/tmp
),並將該目錄掛載爲內存支持的存儲。這將確保沒有任何東西會駐留在磁盤上。
然而,儘管文件系統是內存支持的,但它的一部分可能會通過一些低級操作系統機制(例如,分頁)寫入磁盤。但是,對於存儲在內存中的任何內容都是如此,而不僅僅是內存支持的文件系統。如果此存儲必須完全保留在內存中並且從未分頁,則需要更具創意,並確保文件系統支持的內存始終爲「常駐」。
相關問題
- 1. Laravel文件上傳創建臨時文件的文件夾
- 2. 使用ajax上傳文件的struts 2
- 3. 創建臨時文件:不能寫入
- 4. 如何將文件上傳到S3而不創建臨時本地文件
- 5. 是否有可能在文件上傳後更改文件名
- 6. 是否有可能從文件系統創建VectorDrawable(* .xml文件)
- 7. 如何使用AWS Lambda創建臨時文件將'文件'上傳到S3?
- 8. 是否有可能使用JQuery創建一個html文件?
- 9. 使用ActionScript創建臨時XML文件
- 10. IntelliJ不檢測struts 2和磁貼,不能創建文件集
- 11. Java創建臨時文件
- 12. git diff不會創建臨時文件
- 13. Struts - 上傳文件
- 14. 是否可以使用cURL來上傳使用POST文件?
- 15. 重新使用PHP文件上傳文件上傳的臨時文件
- 16. 是否有可能使用PHP創建文件上傳隧道(服務器到服務器)而沒有臨時文件開銷
- 17. NullPointException在Struts 2中上傳文件
- 18. 文件上傳與Ajax的struts 2
- 19. 在struts 2中上傳多個文件
- 20. Struts 2文件上傳給NULL指針
- 21. 在Struts 2中上傳多個文件
- 22. 是否有可能創建一個臨時python文件並導入該.py文件的類和屬性
- 23. 創建用於上傳的臨時圖像文件
- 24. 是否有可能創建一個JavaScript文件上傳到其他地方?
- 25. PHP臨時上傳文件不是有效的圖片資源
- 26. 上傳圖片:臨時文件/名稱未創建
- 27. 使用隨機臨時文件名與PHP上傳文件
- 28. 使用restify清理文件上傳後的臨時文件
- 29. 是否可以使用PowerMock來模擬創建新文件?
- 30. 上傳後處理臨時文件
非常有創意的方式來滿足不存儲在磁盤上的要求。問題是,如果它看起來像一個文件,並可以像文件一樣訪問,那麼這不會通過。 –