我想向我的应用程序添加一个简单的按钮,单击该按钮将调用一个操作,该操作将从我拥有的两个列表创建一个 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
应该可以解决问题..
谢谢!
最佳答案
您可以使用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)
部分即可。
关于scala - 使用 Play Framework 下载 csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44308925/