我正在使用 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/