【问题标题】:Downloading csv file using Play Framework?使用 Play Framework 下载 csv 文件?
【发布时间】:2017-11-02 16:25:25
【问题描述】:

我想在我的应用程序中添加一个简单的按钮,单击该按钮将调用一个操作,该操作将从我拥有的两个列表中创建一个 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 应该可以解决问题..

谢谢!

【问题讨论】:

  • 如果您以 Ajax 形式发送请求,它可能无法按预期工作,请在执行请求时尝试在单独的窗口中打开。
  • @mavarazy 我该怎么做?
  • 链接中的目标应为空白

标签: scala file csv playframework playframework-2.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) 部分即可。

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2021-09-09
    相关资源
    最近更新 更多