我编写了servlet,它实际上将图像的字节写入响应。我可以通过提交带有动作获取或发布到servlet的表单来下载图像。但是,如何在不离开页面的情况下请求此servlet?
我试过了jQuery.get("http://localhost:8080/mydownloadservlet")
。请求已在servlet中收到,但图像未下载。同样适用于表单提交。
谢谢, 阿米特帕特尔
答案 0 :(得分:3)
将Content-Disposition: attachment
标头添加到servlet响应中。这样,客户端就可以弹出另存为对话框。
response.setHeader("Content-Disposition: attachment; filename=image.gif");
在向响应写入任何字节之前执行此。您不需要在客户端使用任何JavaScript。只是指向servlet的链接或表单。客户端不会离开页面,因为内容处置未设置为inline
。
然而,您仍然依赖于客户端的默认配置是否存在与附件Content-Type
相关联的默认操作,该操作将立即执行,而不是另存为。例如,在Firefox中,这可以通过工具>进行配置。选项>应用。您无法从服务器端控制此操作,但您不必担心这一点。客户决定自己这样做。
答案 1 :(得分:3)
以下工作。
创建了隐藏的iframe。
<iframe src="" id="hiddenFrm" style="display:none;" frameborder="0"></iframe>
并使用jquery通过设置隐藏帧的src来下载图像。
function download(url){
jQuery("#hiddenFrm").attr("src",url);
}
答案 2 :(得分:0)
1)您需要正确设置HTTP标头:
Content-Disposition: attachment; filename=mypic.jpg
2)您需要导航到该页面,而不是jQuery.get
,而是
<a href="http://localhost:8080/mydownloadservlet">Download pic</a>
或在javascript中
window.location = 'http://localhost:8080/mydownloadservlet';
如果一切按计划进行,您实际上应该离开页面。