2014-03-27 51 views
1

我有一個網站,在標準的XMLHttpRequest的形式將數據發送到一個Java servlet如下下載png文件後XMLHttpRequest的POST

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(); 

的線通過螢火我看到我的網頁臨危一大堆的信息的東西,但我沒有得到任何下載彈出。如何讓網站在收到http響應中編碼的png時提示用戶將此png保存爲「picture.png」?

幫助表示讚賞。

回答

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(); 
} 
+0

這真是棒極了!謝謝。你能否澄清隱藏的iFrame的目的是什麼? –

+0

目的不是更改當前頁面的內容或創建新的瀏覽器選項卡。 –