在XMLHttpRequest POST后下载png文件

时间:2014-03-27 14:05:07

标签: java javascript ajax java-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();

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

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

您无法通过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();
}