Akka-http - 写入响应输出流

Akka-http - write to response output stream

我需要创建一个大的制表符分隔文件作为对 HTTP GET 请求的响应。 在我的路线中,创建一些 Scala objects 然后我想将这些 objects 的一些自定义表示写入输出流。

这不仅仅是序列化为制表符分隔而不是 JSON,因为我还需要创建一个带有列名的 header,所以恕我直言,这无法通过自定义封送处理来解决。

那么我怎样才能从 HttpRequest 得到一个 writer 或 outputstream 呢?

类似

 ~path("export") {
        get {
              val sampleExonRPKMs = exonRPKMService.getRPKMs(samples)
              val writer = HttpResponse().getWriter // this does not exists
              writeHeader(writer)
              ... // write objects tab separated
        }
   }

您可以使用可编组源完成 Akka HTTP 路由。如果您不想使用自定义编组器,您可以随时使用 Source[ByteString, _] 来完成。有关详细信息,请参阅 docs

您的路线类似于

get {
  val sampleExonRPKMs = exonRPKMService.getRPKMs(samples)
  val headers: String = ???
  Source.single(headers).concat(Source(sampleExonRPKMs).map(_.toTSVLine)).intersperse("\n").map(ByteString.apply)
}

作为一个单独的问题注意:如果您要处理大量数据,getRPKMs 调用将导致将所有数据加载到内存中。