使用Play Framework下载csv文件?

时间:2017-06-01 13:29:45

标签: scala file csv playframework playframework-2.0

我想在我的应用程序中添加一个简单的按钮,点击该按钮将调用一个Action,它将从我拥有的两个列表中创建一个csv文件并将其下载到用户计算机。

这是我的行动:

def createAndDownloadFile = Action {

    val file = new File("newFile.csv")

    val writer = CSVWriter.open(file)

    writer.writeAll(List(listOfHeaders, listOfValues))

    writer.close()

    Ok.sendFile(file, inline = false, _ => file.getName)
  }

但现在这对我有用,文件没有从浏览器下载......

我希望看到该文件被浏览器下载,我认为Ok.sendFile应该可以做到这一点..

谢谢!

1 个答案:

答案 0 :(得分:-1)

您可以使用Enumerators和流。它应该像这样工作:

val enum   = Enumerator.fromFile(...)
val source = akka.stream.scaladsl.Source.fromPublisher(play.api.libs.streams.Streams.enumeratorToPublisher(enum))
Result(
  header = ResponseHeader(OK, Map(CONTENT_DISPOSITION → "attachment; filename=whatever.csv.gz")),
  body = HttpEntity.Streamed(source.via(Compression.gzip), None, None)
)

这实际上会通过gzip管理下载。如果不需要,请删除.via(Compression.gzip)部分。