【问题标题】:Force a File Download by either Ajax or Javascript通过 Ajax 或 Javascript 强制下载文件
【发布时间】:2015-06-30 14:15:39
【问题描述】:

所以我有一个列出文件的表格,每个文件的 URL 都存储为按钮上的数据属性。单击按钮时,我想触发 Javascript/Ajax 调用,该调用将在 URL 处下载文件。

现在有一些警告,

  1. 文件需要通过下载对话框下载或需要 只需按照您的预期添加到浏览器下载中即可。
  2. 该请求需要能够采用标头,因为这是一个跨域请求。
  3. 这需要在主要浏览器(IE、Chrome、Firefox、Safari)上运行

到目前为止,我已经尝试过使用 XMLHttpRequest:

e.preventDefault();
var csrftoken = getCookie('csrftoken');
var req = new XMLHttpRequest;
req.open("POST",$(this).data("url"));
req.setRequestHeader("MY HEADER", "HEADER VALUE;");
req.withCredentials = true;
req.send();

我也尝试过 Ajax GET 请求(不强制下载)并在锚标记上使用 Download 属性(不接受标头)。

谢谢

【问题讨论】:

  • 你有什么理由不能简单地使用<a href="..." download>
  • AJAX 的意义为 0。就像大家建议的那样,只需使用普通的<a href..
  • 正如我在问题中所说,据我所知,那里的链接不允许您包含请求标头。因为这是一个跨域请求
  • 这个问题仍然含糊不清,解释一下你想要做什么,而不是“如何”你认为你应该这样做。请

标签: javascript jquery html ajax


【解决方案1】:

而不是使用不兼容跨浏览器的锚标记(显然,我没有意识到微软在获得 HTML5 规范方面的速度如此之慢。不过这并不意外)

我们可以利用 iframe 来避免重定向并在保持跨浏览器兼容性的同时实现此效果。

<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>

只要文件不是 .html 或某种可以通过浏览器显示的文件(.htm、.html、.xhtml、.aspx 等),它就应该下载该文件。

【讨论】:

  • 据我所知,下载属性不允许您包含请求标头。
  • 也许你没有完全解释你当时想要做什么。你到底需要做什么?
  • 单击按钮时,我会在 URL 中找到文件。该文件需要通过下载对话框下载,或者只需按照您的预期添加到浏览器下载中。该请求需要能够接受标头,因为这是一个跨域请求。这需要在主要浏览器(IE、Chrome、Firefox、Safari)上工作
  • 响应头将设置内容处置。如果您可以控制 URL 上的内容,则可以通过设置响应标头来强制客户端下载。 stackoverflow.com/questions/3749231/…
【解决方案2】:

你要先捕获url,然后:

document.location = 'data:Application/octet-stream,' + encodeURIComponent("http://somedomain.com/somefile.some");

window.open("http://somedomain.com/somefile.some");

这种方法不需要标题。

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 2013-01-24
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2016-07-08
    相关资源
    最近更新 更多