在播放框架中发送大文件时如何捕获客户端断开连接?

How to catch a client disconnection when sending a large file in play framework?

我正在播放应用程序响应中发送文件。当客户端下载文件时,我正在从本地服务器清理文件。我正在使用以下代码实现此目的:

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

但当客户端断开连接时,临时文件仍保留在本地服务器中。但我想处理这种断开连接并清理 临时文件。我听说过 onDoneEnumerating() 但无法使用它。

谁能指出处理断开连接和从本地服务器清理临时文件的最简单方法?

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

这将经常清理临时文件目录。