java - 表单提交后,下载文件

标签 java servlets struts2

我正在使用 struts2 和 servlet。 (由于 servlet 附带了第 3 方 ajax 功能)。

我的一个表单正在发布到 servlet。 (名称“/exclude/new.srl”) 我已将 struts2 设置为忽略对“排除” namespace 的所有请求。 所以请求很好地到达了 servlet。

Servlet 完成其工作,然后在结束之前继续执行以下操作:

response.getOutputStream().print("'OK'");
response.getOutputStream().close();

现在我不详细了解第 3 方软件,所以我不太确定,但我认为 OK 语句告诉我的第 3 方 ajax 解决方案关闭表单并刷新页面的某些内容。

一切正常。

但是现在我正在尝试为此添加一些新内容。我想向用户发送一个文件。换句话说,当提交表单时,过去发生的所有事情仍然应该发生,而且还应该要求用户保存或打开文件。

所以我创建了一个 struts2 操作来返回文件,没问题。 但是我如何对 servlet 进行编程以将此文件推送给用户并返回响应 OK? 我不需要使用 struts2 操作来推送文件,如果可以在 servlet 内完成,这是完全可以接受的。

有人吗?

最佳答案

您可以发送文件

// Set the headers.
res.setContentType("application/x-download");
res.setHeader("Content-Disposition", "attachment; filename=" + filename);

// Send the file.
OutputStream out = res.getOutputStream();
File file = new File(yourPath);
response.setContentLength((int) file.length());

BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
int readBytes = 0;
while ((readBytes = buf.read()) != -1)
    stream.write(readBytes);
buf.close();
stream.close();

但是我如何对 servlet 进行编程以将此文件推送给用户并返回响应 OK?

我认为这是不可能的。来自 servlet 的响应有一个类型,由内容类型表示。如果您将其设置为下载,则您无法发送正常响应,这意味着您无法发送“确定”。

关于java - 表单提交后,下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6941529/

相关文章:

java - 如何读取音频文件?我应该使用哪种方法?

java - 尝试获取整个 XML 文件。 [#文档: null] error

java - JSP中request.getParameter返回null

validation - 如何在实现ModelDriven接口(interface)的action中使用struts2中的注释来实现验证?

java - Struts 2 在下拉列表中选择框显示值

java - Android 如何设置精确的重复闹钟?

java - 为什么 HashMap.Entry 类有一个哈希字段?

java - 如何在 session 对象被销毁之前调用方法?

java - GWT RPC 进行时更新/刷新 View

spring - org.hibernate.exception.GenericJDBCException : Cannot open connection