我寫了一個實際將圖像字節寫入響應的servlet。我可以通過提交表單來獲取或張貼到servlet來下載圖像。但是我怎樣才能在不離開頁面的情況下請求這個servlet呢?我試過jQuery.get("http://localhost:8080/mydownloadservlet")
。請求正在servlet中收到,但圖像沒有得到下載。同樣使用表單提交。如何在不離開頁面的情況下下載圖片?
感謝, 阿米特·帕特爾
我寫了一個實際將圖像字節寫入響應的servlet。我可以通過提交表單來獲取或張貼到servlet來下載圖像。但是我怎樣才能在不離開頁面的情況下請求這個servlet呢?我試過jQuery.get("http://localhost:8080/mydownloadservlet")
。請求正在servlet中收到,但圖像沒有得到下載。同樣使用表單提交。如何在不離開頁面的情況下下載圖片?
感謝, 阿米特·帕特爾
以下工作。
創建隱藏的iframe。
<iframe src="" id="hiddenFrm" style="display:none;" frameborder="0"></iframe>
並且使用jquery通過設置隱藏幀的src來下載圖像,如下所示。
function download(url){
jQuery("#hiddenFrm").attr("src",url);
}
1)你必須正確設置HTTP頭:
Content-Disposition: attachment; filename=mypic.jpg
2)您需要導航到該頁面,不做jQuery.get
,但
<a href="http://localhost:8080/mydownloadservlet">Download pic</a>
or in javascript
window.location = 'http://localhost:8080/mydownloadservlet';
如果一切按計劃進行,您應該離開該頁面。
將Content-Disposition: attachment
標頭添加到servlet響應中。這樣客戶端被迫彈出一個另存爲對話。
response.setHeader("Content-Disposition: attachment; filename=image.gif");
之前執行此寫入到響應的任何字節。你不需要爲此在客戶端的任何JavaScript。只是指向servlet的鏈接或表單。由於內容處置未設置爲inline
,客戶端不會離開頁面。然而
你仍然依賴於客戶端的默認配置中是否有與將被執行的,而不是立即另存爲附件的Content-Type
關聯的默認操作。以Firefox爲例,這可通過工具>選項>應用程序進行配置。你無法從服務器端控制這個,但你不應該擔心這一點。客戶決定自己這樣做。