Ошибка Django: кодек 'utf-8' не может декодировать байт при попытке создать загружаемый файл
Я создал приложение для выполнения некоторого процесса и застегивания некоторых файлов. Теперь мне нужно сделать zip файл загружаемым для пользователей, чтобы они могли скачать zip файл.
Я работаю с Django и вот что находится в views.py:
def download(request):
context = {}
if request.method == 'POST':
if form.is_valid():
userInput = form.cleaned_data['userInput']
createFiles(userInput)
filename = 'reports.zip'
filepath = '/home/download/'
fl = open(filepath, 'r')
mime_type, _ = mimetypes.guess_type(filepath)
response = HttpResponse(fl, content_type=mime_type)
response['Content-Disposition'] = "attachment; filename=%s" % filename
return response
return render(request, 'download.html', context)
Но я получаю ошибку:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 11: invalid start byte
Что нарушается в этой строке:
response = HttpResponse(fl, content_type=mime_type)
Есть предложения, как это исправить?
Я бы предположил, что вам следует открыть zip-файл с флагами 'rb' (бинарный).
Вот пример из моего рабочего кода:
zip_fullpath = os.path.join(zip_path, zip_filename)
zip_file = open(zip_fullpath, 'rb')
resp = FileResponse(
zip_file,
content_type="application/force-download"
)
resp['Content-Disposition'] = 'attachment; filename=%s' % zip_filename
os.remove(zip_fullpath)
return resp