2017-07-16 78 views
0

我在播放應用程序響應中的文件。當客戶端下載文件時,我正在從本地服務器清除文件。我正在使用以下代碼實現此目的:如何在播放框架中發送大文件時捕獲客戶端斷開連接?

val fileToServe = TemporaryFile(new File(fileName)) 
Ok.sendFile(fileToServe.file, onClose =() => { fileToServe.clean }) 

但是,當客戶端斷開連接時,臨時文件仍保留在本地服務器中。但是我想處理這個斷開連接並清理臨時文件 。我聽說onDoneEnumerating()但無法使用它。

任何人都可以指出我最簡單的方法來處理斷開連接並從本地服務器清理臨時文件嗎?

+0

爲什麼不跟蹤影響所有連接的每個臨時資源?如與連接池? – Fabien

+0

請指教我更多的細節 –

+0

這是我以前做的事情:每當收到一個連接,我將連接存儲在一個全局連接所在的全局對象中。使用字典,我將每個連接所使用或分配的資源關聯起來。斷開連接時,很容易抓取已使用的資源並對這些資源採取適當的操作。至於'如何檢測'斷開連接,我不知道你的框架。但這是基本的,所以我想它已經實現了;-) – Fabien

回答

0

TemporaryFile用於Play收到必須保存在臨時文件位置的數據流,而不是發送文件。它在定稿(2.6前)或幻影文件參考(2.6.x)上刪除。

搭上斷線最簡單的方法是調用Files.deleteIfExists

https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#deleteIfExists-java.nio.file.Path-

中的OnClose塊。如果這似乎並不奏效出於某種原因,你可以使用臨時文件收割者:

https://www.playframework.com/documentation/2.6.x/ScalaFileUpload#Cleaning-up-temporary-files

,將每隔一段時間清理臨時文件目錄。

相關問題