Я загружаю архив с Github и хочу вернуть его в браузер для загрузки. Я успешно получил файл и могу сохранить его на локальном диске c (я могу открыть архив и он нормальный - размер и содержимое):
headers = {'Authorization': 'token ' + github_token}
zip_response = requests.get(github_url, headers = headers)
output = open("archive.zip", "wb")
output.write(zip_response.content)
output.close()
Но когда я возвращаю его клиенту, он больше почти в два раза, и архив поврежден:
zip_content = io.BytesIO(zip_response.content)
return send_file(zip_content,
mimetype='application/zip',
attachment_filename = 'archive.zip')
Javascript:
var url = window.URL.createObjectURL(new Blob([response.data]), {type: 'application/zip'});
var link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'archive.zip');
document.body.appendChild(link);
link.click();
Я пытался использовать другие решения этой проблемы: Загрузить файл из байтов в JavaScript
, но ничего не работает.
Это просто возвращает 0 байтов:
var bytes = new Uint8Array(response.data)
Это вызывает исключение "Не удалось выполнить 'atob' в" Окне " ': Строка для декодирования содержит символы вне диапазона Latin1. ":
var binaryString = window.atob(response.data);
Upd: я обнаружил, что response.data имеет нормальную длину, но когда я создаю новый объект Blob, его в 2 раза больше, Я не знаю почему.