如何在不离开页面的情况下下载图像?

时间:2010-11-23 13:33:06

标签: javascript jquery ajax jsp servlets

我编写了servlet,它实际上将图像的字节写入响应。我可以通过提交带有动作获取或发布到servlet的表单来下载图像。但是,如何在不离开页面的情况下请求此servlet?

我试过了jQuery.get("http://localhost:8080/mydownloadservlet")。请求已在servlet中收到,但图像未下载。同样适用于表单提交。

谢谢, 阿米特帕特尔

3 个答案:

答案 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';

如果一切按计划进行,您实际上应该离开页面。