Spray:发送响应后删除临时文件

Spray: delete temporary file after response is sent

我使用 getFromFile 来响应临时文件。写入响应流后如何删除此文件? 底层服务器是spray-servlet。

终于找到了解决办法:

case class CleanupFile(file: java.io.File)

def sendFileAndCleanup(file: java.io.File) =
  mapRequestContext { ctx =>
    ctx.withRouteResponseMapped {
      case r: spray.http.HttpResponse => r.withAck(CleanupFile(file))
      case x => x
    }
  } {
    getFromFile(file)
  }

然后在 actor 中用 runRoute 处理 CleanupFile:

def receive = runRoute(routes) orElse {
  case CleanupFile(file) => Try(file.delete())
}