per*_*rry 5 scala akka akka-stream akka-http
基本上我想允许用户从服务器下载csv文件.假设服务器上已存在CSV文件.通过GET/export公开API端点.如何将文件从Akka HTTP服务器流式传输到客户端?这就是我到目前为止......
服务:
def export(): Future[IOResult] = {
FileIO.fromPath(Paths.get("file.csv"))
.to(Sink.ignore)
.run()
}
Run Code Online (Sandbox Code Playgroud)
路线:
pathPrefix("export") {
pathEndOrSingleSlash {
get {
complete(HttpEntity(ContentTypes.`text/csv`, export())
}
}
}
Run Code Online (Sandbox Code Playgroud)
Akka-Stream API允许您直接从a创建实体Source[ByteString, _],因此您可以执行某些操作
pathPrefix("export") {
pathEndOrSingleSlash {
get {
complete(HttpEntity(ContentTypes.`text/csv(UTF-8)`, FileIO.fromPath(Paths.get("file.csv")))
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这样您的服务器代码在通过网络发送之前不需要在内存中提取整个CSV文件.文件内容将在启用背压的流中发送.更多关于这里.