Ошибка 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
Вернуться на верх