我知道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);
我正在使用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表单,因为表单数据相当大且是动态创建的。
上面的代码有什么问题吗?我漏掉了什么吗?我不知道如何将数据实际发送给客户端以下载。