【问题标题】:How do I force download with html/javascript in a jsp from IE 9 and above?如何在 IE 9 及更高版本的 jsp 中强制使用 html/javascript 下载?
【发布时间】:2014-09-24 13:05:05
【问题描述】:

我有一个图片链接

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

我需要这个链接直接下载这个文件。 在 Chrome 和 Firefox 上,“下载”属性可以正常工作

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

但是在 ie 上这不能正常工作。 我在互联网上找到了 JS 命令 window.document.execCommand,我尝试以这种方式使用

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

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

谢谢

保罗·菲利普

【问题讨论】:

  • 所以从服务器端强制使用正确的标头。
  • 随文件一起发送的Content-Disposition 标头是什么?该标头用于告诉浏览器如何处理下载的内容。 (当然,浏览器仍然可以配置为忽略它并执行一些其他操作。您无法从服务器控制它。)
  • 我让用户点击“保存”链接并只开始下载,没有窗口询问文件夹,也没有重新加载页面
  • 要更改标题,我(我认为)必须重定向到另一个页面,此页面中只有 img 且标题正确

标签: javascript html jsp internet-explorer jstl


【解决方案1】:

您可以创建一个 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();
%>

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-05
      • 2012-06-25
      • 1970-01-01
      • 2014-03-10
      • 2015-01-30
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      相关资源
      最近更新 更多