java - XMLHttpRequest POST 之后下载 png 文件

标签 java javascript ajax jakarta-ee servlets

我有一个网站,它以标准 XMLHttpRequest 的形式将数据发送到 java servlet,如下所示

var xmlHttp = new XMLHttpRequest();
xmlHttp.open("POST", "/GraphingServlet/FC/ExportPng", false);
xmlHttp.send("some_data");

我的 java servlet 收到此请求,以二进制编码创建一个 png 并将此 png 发送回网站,执行以下操作

response.setContentType("image/png");
response.setHeader("Content-Disposition","attachment; filename=\"picture.png\"");
response.setHeader("Content-Transfer-Encoding", "binary");
ServletOutputStream out = response.getOutputStream();
out.write(byte_array_of_binary_encoded_png);
out.flush();

通过 firebug,我看到我的网页收到了大量信息,但没有下载弹出窗口。如何让网站在收到 http 响应中编码的 png 后提示用户将此 png 保存为“picture.png”?

感谢帮助。

最佳答案

您无法通过 AJAX 下载文件。但是,您可以执行以下操作:

HTML:

<button type="button" onclick="download()">Donwload</button>

<form name="downloadForm" action="/GraphingServlet/FC/ExportPng"
  method="post" target="secretFrame" style="display: none;">
  <input type="hidden" id="param1" name="param1"> 
  <input type="hidden" id="param2" name="param2">
</form>

<iframe name="secretFrame" style="display: none;"></iframe>

JS:

function download() {
  document.getElementById("param1").value = "some_data";
  document.getElementById("param2").value = "some_data";
  document.forms["downloadForm"].submit();
}

关于java - XMLHttpRequest POST 之后下载 png 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22690036/

相关文章:

java - 什么时候将 object 设置为 null 比较好。 (JSF)。

java - 如何从文件 config.properties 中读取 persistence.xml <jta-data-source> 的标签值

javascript - 预加载内容与 Ad-Hoc

Java jersey 导入包

Java泛型返回类型(具有相似的输入参数)

javascript - 从 HIGHCHART 中删除零

javascript - 指定选择器时,为什么 jQuery .index() 方法仅适用于集合中的第一个元素?

javascript - 使用带有输入数组的 javascript 插件时出现问题

javascript - 发送数组到post ajax

javascript - 使 div 出现在按钮单击上 (PHP)