播放框架 - 流文件响应

时间:2015-06-15 19:26:47

标签: playframework playframework-2.0

我有一个动作,打算返回一个描述某些数据库(Cassandra)中持久存储的记录的文件。 由于可能会描述许多记录,因此在创建响应之前,我不会将整个表示存储在内存中。 我目前的解决方案是在使用FileWriter编写的文件系统上创建一个文件,一旦文件计算完成,将其返回为:

val responseFile = new File(records_file_path)
val fileContent = Enumerator.fromFile(responseFile)

Ok.sendFile(
  content = responseFile,
  fileName = _ => "records_descriptions.csv"
)

是否有更好的方法可以在不需要在磁盘上保留文件的情况下执行此操作? 我在考虑像ChunkedResult这样的东西吗? 我只是不确定如何创建输出流来编写DB记录而不会同时将所有内容加载到堆上

1 个答案:

答案 0 :(得分:1)

解决方案是创建一个Enumerator而不是一个流 我使用数据库返回的Seq上的map方法创建了Enumerator,在Controller端使用了Ok.chunked(resultsEnumerator)