在后台下载二进制文件时渲染/重定向到新的html页面?

时间:2011-11-02 23:14:57

标签: playframework

我们的网站最近在Play框架中重写。我们向用户提供文件下载,并使用renderBinary()正确下载文件。

现在,当二进制文件在后台下载时,我想向用户显示/呈现新的html页面。有点像这样:

[亲爱的网站用户:点击此处下载此文件:bigfile.zip]

用户点击后,bigfile.zip开始下载。然后我想向用户显示一个新页面:

[亲爱的网站用户:感谢您下载bigfile。这是一些额外的信息。]

对renderBinary()的调用永远不会返回,因此我之后无法调用Application.showMyPage()之类的东西。同样,渲染我的html页面[Application.showMyPage()]的调用也从不返回,所以我不能在之后调用renderBinary()。

也许javascript onclick是唯一的方法,但我很想知道在Play中是否有一种干净的方法。

2 个答案:

答案 0 :(得分:0)

您要求的是您的客户端同时执行两个请求,而不是HTTP的工作方式。最简单的方法,以及我看到下载网站的工作方式如下

  1. 点击此处下载链接显示页面
  2. 点击下载链接,使用renderBinary方法调用您的操作,显示感谢页面,其中包含一段javascript以自动开始下载文件。
  3. 这是人们普遍期待的用户体验。

答案 1 :(得分:0)

当我们在后台上传文件时,我们有一个小的“隐藏”iframe,其中包含用户选择文件并点击“上传”的表单。然后文件在后台加载 - 或者更确切地说是在iframe内部。当上传完成时,服务器返回一些javascript,它在父窗口中调用js函数作为主窗口。当调用此主窗口函数时,主窗口可以将其自身重定向到新的完成页面。希望它有所帮助