通过Ajax或Javascript强制下载文件
所以我有一个列表文件,每个文件的URL作为一个数据属性存储在一个按钮上。单击一个按钮,我想触发一个Javascript/Ajax调用,该调用将在URL处下载文件 现在有一些警告通过Ajax或Javascript强制下载文件,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,所以我有一个列表文件,每个文件的URL作为一个数据属性存储在一个按钮上。单击一个按钮,我想触发一个Javascript/Ajax调用,该调用将在URL处下载文件 现在有一些警告 文件需要通过下载对话框下载,或者需要 正如您所期望的,只需添加到浏览器下载中即可 请求需要能够获取头,因为这是一个跨域请求 这需要在主要浏览器(例如,Chrome、Firefox、Safari)上运行 到目前为止,我已经尝试使用XMLHttpRequest: e.preventDefault(); var csrftok
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请求(不强制下载)和在锚标记(不接受头)上使用下载属性
谢谢你,不要使用锚定标签,因为锚定标签不兼容跨浏览器(显然,我没有意识到微软在获取HTML5规范方面进展如此之慢。不过这并不出乎意料) 我们可以利用iframe来避免重定向,并在保持跨浏览器兼容性的同时实现此效果
<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>
只要该文件不是.html或某种可以通过浏览器显示的文件(.htm、.html、.xhtml、.aspx等),它就应该下载该文件。而不是使用锚定标记,锚定标记不兼容跨浏览器(显然,我没有意识到微软在获取HTML5规范方面的速度如此之慢。这并非意外) 我们可以利用iframe来避免重定向,并在保持跨浏览器兼容性的同时实现此效果
<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>
只要文件不是.html或某种可以通过浏览器显示的文件(.htm、.html、.xhtml、.aspx等),它就应该下载文件。您必须先捕获url,然后:
document.location = 'data:Application/octet-stream,' + encodeURIComponent("http://somedomain.com/somefile.some");
或
这种方法不需要标题。您必须先捕获url,然后:
document.location = 'data:Application/octet-stream,' + encodeURIComponent("http://somedomain.com/somefile.some");
或
这种方法不需要标题。有什么原因不能简单地使用
?AJAX完全没有意义。只需使用常规的@light:正如我在问题中所说的,据我所知,那里的链接不允许包含请求头。由于这是一个跨领域的请求,这个问题仍然很模糊,请解释一下你想做什么,而不是你认为你应该如何做。请说明为什么不能简单地使用
?AJAX完全没有意义。只需使用常规的@light:正如我在问题中所说的,据我所知,那里的链接不允许包含请求头。由于这是一个跨领域的请求,这个问题仍然很模糊,请解释一下你想做什么,而不是你认为你应该如何做。请注意,据我所知,下载属性不允许您包含请求头。也许您没有完全解释您当时要做什么。确切地说,你需要做什么?点击一个按钮,我就会在URL上找到文件。该文件需要通过下载对话框下载,或者只需要像您预期的那样添加到浏览器下载中。请求需要能够获取头,因为这是一个跨域请求。这需要在主浏览器(例如,Chrome、Firefox、Safari)上工作。响应头将设置内容配置。如果您可以控制URL上的内容,则可以通过设置响应头来强制客户端下载。据我所知,下载属性不允许您包含请求头。也许您没有完全解释您要做什么。确切地说,你需要做什么?点击一个按钮,我就会在URL上找到文件。该文件需要通过下载对话框下载,或者只需要像您预期的那样添加到浏览器下载中。请求需要能够获取头,因为这是一个跨域请求。这需要在主浏览器(例如,Chrome、Firefox、Safari)上工作。响应头将设置内容配置。如果您可以控制URL上的内容,则可以通过设置响应头来强制客户端下载。