Я знаю, что jQuery ajax-метод не может обрабатывать загрузки, и я не хочу добавлять плагин jQuery для этого.
Я хочу знать, как отправлять данные POST с помощью XMLHttpRequest для загрузки файла.
Вот что я пробовал:
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. Я не хочу создавать правильную html-форму с действием POST, потому что данные формы довольно большие и динамически создаются.
Что-то не так с этим кодом? Что-то мне не хватает? Я просто не знаю, как на самом деле отправлять данные клиенту в качестве загрузки.