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