更新 20140702:
(但我将其他一个答案标记为接受而不是我自己的答案,因为它让我在那里一半,并奖励努力)
似乎无法通过链接设置HTTP请求标头<a href="...">,并且只能使用XMLHttpRequest.
但是,链接到的URL是应该下载的文件(浏览器不应该导航到它的URL),我不确定这是否可以使用AJAX完成.
此外,返回的文件是二进制文件,而AJAX不适用于此.
如何使用添加了自定义标头的HTTP请求触发文件下载?
编辑:修复损坏的链接
在HTML页面上,在单击图像("img")或锚点("a")标记的链接时,我想为GET请求添加自定义标头.这些链接通常用于下载动态内容.这些标头可以是SAML标头或自定义应用程序特定标头.
是否可以通过JavaScript添加这些自定义标头?或者,如果我通过XMLHttpRequest添加这些,我如何实现下载功能?
此要求仅适用于IE6或7.
我知道jQuery的ajax方法无法处理下载,我不想添加一个jQuery插件来执行此操作.
我想知道如何使用XMLHttpRequest发送POST数据来下载文件.
这是我尝试过的:
var postData = new FormData();
postData.append('cells', JSON.stringify(output));
var xhr = new XMLHttpRequest();
xhr.open('POST', '/export/', true);
xhr.setRequestHeader("X-CSRFToken", csrftoken);
xhr.responseType = 'arraybuffer';
xhr.onload = function (e) {
console.log(e);
console.log(xhr);
}
xhr.send(postData);
Run Code Online (Sandbox Code Playgroud)
我正在使用Django,该文件似乎成功发送回客户端.在Chrome的网络标签中,我可以在预览标签中看到乱码(我期待).但我想发回一个zip文件,而不是zip文件的文本表示.这是Django的后端:
wrapper = FileWrapper(tmp_file)
response = HttpResponse(wrapper, content_type='application/zip')
response['Content-Disposition'] = "attachment; filename=export.zip"
response['Content-Length'] = tmp_file.tell()
return response
Run Code Online (Sandbox Code Playgroud)
我已经搜索了几个小时,但没有找到关于如何使用XMLHttpRequests执行此操作的正确示例.我不想用POST操作创建一个合适的html表单,因为表单数据相当大,并且是动态创建的.
上面的代码有问题吗?我错过了什么?我只是不知道如何实际将数据作为下载发送到客户端.
我正在尝试在充满帐户信息的现有页面中包含vCard导出功能.
丑陋的方法将涉及1,将表单提交到同一页面,处理它并重新呈现整个页面,或2,GET以页面上的iframe为目标.我真的想避免这两个,但我可能不得不使用#2来实现目标.
现在我有:
<input type="image" src="/intra/imgs/icons/vcard.png" onclick="$.post('/intra/vcard.php', { id: '992772', type: 'sponsor'});">
Run Code Online (Sandbox Code Playgroud)
从某种意义上讲,如果我在Firebug中观看XHR活动,我会看到请求返回正确的响应,充满了vCard格式的数据.但是,它不会提示用户将响应作为文件下载,即使该卡是通过以下方式发送的:
header('Content-Type: text/x-vcard');
header("Content-Disposition: attachment; filename={$this->name_first}{$this->name_last}.vcf");
Run Code Online (Sandbox Code Playgroud)
我做错了什么,或者这是不可能的?