Мне необходимо передать файл с Django на веб-страницу. Файл передается. Но в Excel не открывается, и визуально видно что кодировка файла отличается.
Сильно упрощенный код выглядит так (на сериалайзер и передачу pk не обращаем внимание - на логику это не влияет):
Сторона сервера:
class CEIViewset(GenericViewSet):
queryset = CompetitionCEI.objects.all()
permission_classes = (permissions.IsAuthenticated,)
serializer_class = CompetitionCEISerializer
@action(detail=False, methods=['POST'], permission_classes=(permissions.IsAuthenticated, ))
def export_to_xls(self, request):
ser = self.serializer_class(data=request.data)
if ser.is_valid():
pk = ser.validated_data.get('pk')
with open(os.path.join(settings.BASE_DIR, 'data', 'sample.xls'), 'rb') as f:
data = f.read()
response = HttpResponse(data, content_type='application/xls; charset=utf-8')
response['Content-Disposition'] = 'attachment; filename="sample.xls"'
return response
Клиентская часть:
function exportXLS(pk) {
$.ajax({
method: 'POST',
url: '/api/v1/cei/export_to_xls/',
csrfmiddlewaretoken: '{{ csrf_token }}',
contentType: 'application/json',
responseType: 'blob',
data: JSON.stringify({
pk: {{ object.pk }},
}),
success: function (response) {
}
}).done(function(response){
var newBlob = new Blob([response], {type: "application/xls"});
const data = window.URL.createObjectURL(newBlob);
var link = document.createElement('a');
link.href = data;
link.download="sample.xls";
link.click();
})
}
Оригинальный файл
Скачиваемый файл
Видно что бьются данные. Пока не пойму - на стороне клиента или сервера? И как поправить?