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
调用将导致将所有数据加载到内存中。
我需要创建一个大的制表符分隔文件作为对 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
调用将导致将所有数据加载到内存中。