我知道jQuery的Ajax方法不能处理下载,我不想添加一个jQuery插件来做这件事.
我想知道如何使用XMLHttpRequest发送POST数据来下载文件.
以下是我try 过的:
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
我已经搜索了几个小时,没有找到关于如何使用XMLHttpRequests做到这一点的适当示例.我不想使用POST操作创建合适的HTML表单,因为表单数据相当大,并且是动态创建的.
上面的代码有什么问题吗?我错过了什么吗?我只是不知道如何真正将数据作为下载发送到客户端.