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

标签 java dynamic workflow download

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

我目前的解决方案是让他们提交此表单并在 servlet 端更改响应 header - 将内容配置为附件并提供适当的 mime 类型。

但我发现这种方法是不够的。因为文件的生成可能需要很长时间,在这种情况下,在一定的超时后,我会在浏览器中直接收到 500 或 503 错误。我想这对于当前的方法来说是意料之中的。

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

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

最佳答案

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

这将是一个页面:

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

同步有点老套,但您的问题听起来就是您想要的方法。

异步方法包括:

  • 使用 Ajax 使指向文档的链接在准备就绪后显示在页面上。
  • 有一个单独的页面来显示以前生成的文档。用户可以在闲暇时访问此页面,同时,他们可以浏览站点的其余部分。这需要保留生成文档的历史记录。
  • 按照您的建议,通过电子邮件发送。

关于java - 如何启用从浏览器下载动态生成的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431222/

相关文章:

Java:加载用户定义的接口(interface)实现(来自配置文件)

jquery - 如何根据父元素的宽度使用 CSS/jQuery 在子背景图像上动态重复 x?

HTML/CSS - 创建论坛 - 任何动态缩进 tr 的方法?

java - 说一个方法读取一个字节的数据是什么意思?

java - Hibernate session.flush() --> 如何只更新脏对象而不是所有内容?

java - 如何使用 RESTful 端点将 jBPM 工作流程与 Spring Boot 集成?

sharepoint - Sharepoint 中长时间运行的工作流,它们是否阻止 w3wp 进程

database - 最佳实践 : Storing a workflow state of an item in a database?

java - Java Web 应用程序的入口点

java - 在 Java 的 for-each 语句中不使用循环变量是一种不好的风格吗?