Проблема с передачей/приемом файла Excel из бэкенда (django_v1.9.11) во фронтенд (angularjs)
На передней панели есть таблица и кнопка для экспорта в Excel. При нажатии на нее необходимо отправить ajax на бэкэнд, сгенерировать файл Excel и передать его на фронтэнд, чтобы загрузить через браузер на диск.
Бэкенд (django v1.9.11)
from openpyxl import Workbook
from django.http import HttpResponse
def send_xl(self, request):
wb = Workbook()
sheet = wb.active
# this is test data. real data is hidden
sheet['A1'] = 'Hello world!'
sheet['B1'] = 'Excel with Django.'
response = HttpResponse(content_type='application/vnd.openxmlformats- officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename=my_excel_file.xlsx'
wb.save(response)
return response
Элемент HTML
<button ng-click="downloadExcel()">
Export
</button>
Фронтенд (angularjs)
$scope.downloadExcel = function(){
$.get("", {action:"send_xl", col: $scope.col, sortDirection: $scope.sortDirection }).
then(function (response){
let blob = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
let url = URL.createObjectURL(blob);
let a = document.createElement('a');
document.body.appendChild(a);
a.href = url;
a.download = 'filename.xlsx';
a.click();
window.URL.revokeObjectURL(url);
}
Я ожидаю, что при нажатии на кнопку браузер загрузит файл, который можно открыть через Excel. Файл загружается, но Excel выдает ошибку:
(я открываю его через LibreOffice) "Файл 'filename.xlsx' поврежден и поэтому не может быть открыт. LibreOffice может попытаться восстановить файл.
Повреждение может быть результатом манипуляций с документом или структурного повреждения документа при передаче данных.
Мы рекомендуем не доверять содержимому восстановленного документа. Выполнение макросов для этого документа отключено.
Должен ли LibreOffice восстановить файл?"
Скажите, что я делаю не так. Что я не понимаю? Заранее спасибо за ответ