Я пытаюсь загрузить zip-файл из API Django и попросить пользователя загрузить его. В zip есть два файла .csv.
Я могу загружать отдельные файлы .csv по отдельности, но когда я пытаюсь загрузить zip и разархивировать, я получаю сообщение об ошибке, что zip поврежден. Для проверки работоспособности я могу отправить запрос через Postman. Я могу успешно загрузить и разархивировать файл, используя это.
Вот мой фрагмент кода:
axios
.post('http://0.0.0.0:8000/sheets/', data,
{
headers: {
'Content-Type': 'multipart/form-data',
'responseType': 'arraybuffer'
}
})
.then(res => {
console.info(res.data)
const disposition = res.request.getResponseHeader('Content-Disposition')
var fileName = "";
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) {
fileName = matches[1].replace(/['"]/g, '');
}
let blob = new Blob([res.data], { type: 'application/zip' })
const downloadUrl = URL.createObjectURL(blob)
let a = document.createElement("a");
a.href = downloadUrl;
a.download = fileName;
document.body.appendChild(a);
a.click();
Ниже написал ответ!
В моем случае файл отображается поврежденным, а также без заголовков. Я выполняю тот же код, что и выше. Кто-нибудь решил проблему? Любая зацепка будет полезна.
регулярное выражение имени файла очень помогло!
Та же проблема в React. но я пробовал напрямую из API в браузере, все будет работать без проблем.





Проблема заключалась в том, что «responseType»: «arraybuffer» не должно быть в «заголовках».
Тогда где он должен быть?
@Tomer responseType не должен быть атрибутом в объекте, на который ссылается атрибут headers, а должен быть «корневым» атрибутом в объекте конфигурации (родственным атрибуту headers, если он присутствует).
Чтобы добавить к ответу btbam91: responseType должен быть частью конфигурации. В приведенном выше примере:
axios
.post('http://0.0.0.0:8000/sheets/', data,
{
responseType: 'arraybuffer',
headers: {
'Content-Type': 'multipart/form-data',
}
})
Вы нашли решение? Я борюсь с той же проблемой :(