如何使用 Play Framework 2.0 下载文件

Posted

技术标签:

【中文标题】如何使用 Play Framework 2.0 下载文件【英文标题】:How to download a file with Play Framework 2.0 【发布时间】:2012-12-04 17:20:43 【问题描述】:

我正在使用 Play Framework 2.0.3 创建一个应用程序,该应用程序可以提供用户可以下载的 Excel 文件。

 response().setContentType("application/x-download");  
 response().setHeader("Content-disposition","attachment; filename=tradeLogTest.xlsx");  

但是,如何从response()获取输出流?tks

【问题讨论】:

【参考方案1】:

Play 的动作可以返回一个 File:

response().setContentType("application/x-download");  
response().setHeader("Content-disposition","attachment; filename=tradeLogTest.xlsx"); 
return ok(new File("/absolute/path/to/tradeLogTest.xlsx"));

Here's an API for Results

【讨论】:

在 Scala 中有一个快捷方式:Ok.sendFile(new java.io.File(myFile))。也许 Java 也一样 Here 是@JulienLafont 快捷方式的官方文档。 支持简历吗? 如何强制例如 chrome 使用其内部 PDF 查看器打开文件(如果是 PDF)? @behzad use content-disposition inline (***.com/q/1395151/1066240) 无论如何请记住,最终浏览器决定如何处理文件(显示或下载)【参考方案2】:

服务文件 如果将整个内容加载到内存中以获取简单内容不是问题,那么大型数据集呢?假设我们想将一个大文件发回给 Web 客户端。

阅读更多:http://www.playframework.com/documentation/2.0.x/JavaStream

【讨论】:

【参考方案3】:

可以在 Play as 中为静态文件提供下载选项:

Ok.sendFile(new File("path to file/abc.csv"), inline=true).withHeaders(CACHE_CONTROL->"max-age=3600",CONTENT_DISPOSITION->"attachment; filename=abc.csv", CONTENT_TYPE->"application/x-download");

还有其他可用的参数

对于 Internet Explorer - 确保设置内容处置

【讨论】:

以上是关于如何使用 Play Framework 2.0 下载文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Play Framework 2.0 (Scala) 中插入测试数据?

Play Framework 2.0 中公共字段的使用

Play framework 2.2.0 打印最终解决的依赖列表

Play Framework - 使用参数重定向

Play framework 2.0 尝试级联删除时出错“参数“#1”未设置;SQL语句:delete”

Play Framework:如何不查看文件夹以了解 Play Framework 中的更改