如何从浏览器下载动态生成的文件?

时间:2011-12-08 12:48:57

标签: java dynamic workflow download

我有一个Web应用程序,其中一个工作流程,用户可以下载动态生成的文件。输入是具有生成文件所需参数的表单。

我目前的解决方案是让他们提交此表格&在servlet端我更改了响应标题 - 内容处置为附件&还提供适当的哑剧型。

但我发现这种方法不够充分。因为有可能文件的生成可能需要很长时间,在这种情况下,在一定的超时后我直接在浏览器中得到500或503错误。我想这是当前方法的预期。

我希望我的工作流程足够灵活,可以在用户提交表单后立即告诉用户文件可能需要一段时间才能生成&我们将在文件准备就绪后立即显示该文件的链接。我想我也可以将文件或此消息通过电子邮件发送给他们,但这并不理想。

你们可以建议我解决这个问题吗?我应该更具体地提供信息吗?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您可以使用表单数据对服务器进行异步Ajax调用,而不是直接提交表单。 在服务器上,您可以创建临时文件,并使用下载URL返回指向客户端的链接。 通过Javascript提交答案后,您可以向用户显示提示,即下载链接将在一分钟内出现。不要忘记清理临时文件!

对于提交Ajax调用,我建议使用Javascript Framework。看看JQuery:

http://api.jquery.com/category/ajax/

答案 1 :(得分:1)

如果您想同步执行此操作(即让用户等待文档准备就绪,而不是让它们在等待时退出并执行其他操作),传统方法是将它们带到“报告加载”页面。

这将是一个页面:

  • 1)通知他们报告正在加载。
  • 2)刷新自己(使用元刷新标记或javascript)
  • 3)刷新后,检查报告是否准备就绪,并且:
    • a)如果还没有准备就回到第1步
    • b)如果准备好就给他们文件。

同步是一种老派,但你的问题听起来像是你想要的方法。

异步方法包括:

  • 使用Ajax准备好后,页面上会显示文档的链接。
  • 有一个显示以前生成的文档的单独页面。用户可以随意访问此页面,同时,他们可以浏览网站的其余部分。这需要保留生成文档的历史记录。
  • 如您所知,请通过电子邮件发送。