如何在IE 9及以上版本的jsp中使用html/javascript强制下载

How do I force download with html/javascript in a jsp from IE 9 and above?

本文关键字:html javascript 下载 jsp IE 版本      更新时间:2023-09-26

我有一个到img 的链接

<a href="relative_Path_of_IMG">Save</a>

我需要这个链接直接下载这个文件。在Chrome和Firefox上,属性"下载"运行良好

<a href="relative_Path_of_IMG" download>Save</a>

但是在ie上这不太好用。我在互联网上找到了JS命令窗口.dococument.execCommand,我试图用这种方式使用

window.document.execCommand('SaveAs', true, fileName || fileURL)

但这种方式打开一个窗口,让用户选择一个文件夹保存,我需要在用户下载的默认文件夹上自动执行下载,就像Chrome和Firefox上的属性下载一样。

感谢

Paulo Filipe

您可以创建一个JSP并将其用作servlet。它会收到一个带有你想要下载的图片url的参数链接。

这个servlet将打开一个流来读取文件,并打开另一个流在浏览器上写入输出。这样,您的浏览器将负责处理您的文件。

以这个JSP为例。

<%@ page language="java" contentType="image/jpeg; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String urlPrefix = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
String fileUrl = request.getParameter("fileUrl");
if (fileUrl == null || "".equals(fileUrl.trim())) {
    throw new Exception("No image Found.");
}
String fileName = fileUrl.substring(fileUrl.lastIndexOf("/")+1);
response.setContentType("image/jpeg");
response.setHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode(fileName, "UTF-8"));
String fullEncodedUrl = urlPrefix + URIUtil.encodePath(fileUrl);
URL url = new URL(fullEncodedUrl);
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
int len;
byte[] buf = new byte[1024];
while ((len = stream.read(buf)) > 0) {
    outs.write(buf, 0, len);
}
outs.close();
%>

用户应该可以选择保存文件的位置。这是唯一公平的,因为下载是在他们的机器上。

在Chrome和Firefox中,有一个设置选项(在Firefox中)默认为始终将文件保存到下载文件夹。用户通过不更改该设置选择始终保存到同一文件夹。他们可以很容易地更改到下一个设置,说"总是问我在哪里保存文件。"但他们选择,而不是网站。如果Microsoft有类似的选项,用户可以选择,但您(即任何服务器端代码)不能。