我想在我的应用程序中添加一个简单的按钮,点击该按钮将调用一个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
应该可以做到这一点..
谢谢!
答案 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)
部分。