org.apache.commons.fileupload上傳臨時檔案刪除方法2則
在將檔案項封裝成FileItem 物件時,如果檔案尺寸大於臨界值,將會被寫入臨時檔案。
- 清理方法1
這些臨時檔案在不再被使用的時候(如果相應的java.io.File是可回收的則更好)會自動被刪除.這會被org.apache.commons.io.FileCleaningTracker的一個例項啟動的一個收割執行緒默默執行.
在一個web應用中,資源清理是被javax.servlet.ServletContextListener的一個例項控制的.在其他環境中,類似的觀念定是適用的.
FileCleanerCleanup 類
web應用應該使用org.apache.commons.fileupload.FileCleanerCleanup的一個例項,只要把它 web.xml 中:
<web-app>
...
<listener>
<listener-class>
org.apache.commons.fileupload.servlet.FileCleanerCleanup
</listener-class>
</listener>
...
</web-app>
不幸的是,事情到這裡還沒完。如果你和下面的情況一樣,那麼你就只需要按照上面的做,就可以清除資源了。你使用的是commons-io 1.3
- 清理方法2
建立一個 DiskFileItemFactory
FileCleanerCleanup 提供一個 org.apache.commons.io.FileCleaningTracker 例項.此例項必須在建立一個 org.apache.commons.fileupload.disk.DiskFileItemFactory 時使用.這應該通過呼叫如下方法來實現:
FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(servletcontext);
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setFileCleaningTracker(fileCleaningTracker);
FileCleanerCleanup 通過一個靜態方法getFileCleaningTracker()提供一個
org.apache.commons.io.FileCleaningTracker 物件。構造DiskFileItemFactory後,需要設定一個
FileCleaningTracker 物件,用於追蹤產生的臨時檔案。如果不想追蹤臨時檔案,設定
FileCleaningTracker 為null。