我知道jQuery的ajax方法无法处理下载,我不想添加jQuery插件来执行此操作。用XMLHttpRequest下载提示文件
我想知道如何使用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);
我与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
我搜索好几个小时了,现在没有找到如何与XMLHttpRequest的做一个适当的例子。我不想使用POST操作创建合适的HTML表单,因为表单数据相当大,并且动态创建。
上面的代码有问题吗?我失踪的东西?我只是不知道如何将数据实际上作为下载发送到客户端。
我在这里没有看到任何错误。如果您更改视图以响应GET请求返回文件并在浏览器中打开URL,它是否按预期下载文件? – Marat
是的,它下载@Marat。我可以通过使用正常的html表单并使用'/ export /'来获取它,我从xhr得到响应,但它不会触发下载。 xhr可能无法下载到客户端吗? – bozdoz