Django, прочитанный из поля файла, возвращает шестнадцатеричный код, как читать файл документа из ведра AWS s3

Я создаю веб-сайт django, который соответствует документам, и загружаю документы в ведро Minio, поэтому хранилище по умолчанию - это storages.backends.s3boto3.S3Boto3Storage из хранилищ django, а не класс хранилища Django по умолчанию. Этот вопрос похож на Почему возвращает ли Django FieldFIle readline () шестнадцатеричную версию текстового файла?

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'doc_file']

    def form_valid(self, form):
        form.instance.author = self.request.user
        f = form.instance.doc_file.open('r')
        text = ''.join(i.decode("utf-8", 'ignore') for i in f.readlines())
        form.instance.content = ''.join(
            [i if ord(i) < 128 else ' ' for i in text])
        return super().form_valid(form)

Итак, я прочитал документ и передал его в свое поле содержимого, которое является текстовым полем. Поэтому, когда я читаю документ, он все в шестнадцатеричном формате, поэтому мне нужно его декодировать, но даже после этого остаются странные символы. Если я загружаю файл .txt, он читает его правильно, но если я загружаю файл документа, он дает мне много странных символов даже после того, как я сделаю ## ''. Join ([i if ord (i) ‹128 else '' for i в тексте]) ## Например, если файл документа содержит только SSSSSSSSssss, я получаю

! # ddddSxSx l SSSSSSSSssss OJQJCJ & p @ P! i4 @ 4NormalCJOJPJQJmH ‹A @‹ Шрифт абзаца по умолчанию

GTimes New Roman5Symbol3Arial; Helvetica 0hKl & Kl & 0 Oh + '0. +, 0

Корневая запись F $ 1 TableWordDocumentSummaryInformation (DocumentSummaryInformation8

PLZ помощь

РЕДАКТИРОВАТЬ: я понял, как работать с файлами DOCX с библиотекой python-docx, все еще пытающейся выяснить документ, хотя

Та же проблема, что и

Как читать содержимое файла сохраненного текстового документа (.doc и .docx) AWS S3 с помощью AWS Lambda Python?

Я попробовал решение здесь с 3 голосами и использовал байты io для DOC, и это не сработало, возникла ошибка плохого zip файла Чтение файла docx из ведра s3 с помощью flask приводит к ошибке AttributeError


person iyad hassan    schedule 01.07.2021    source источник
comment
Формат doc - это не просто символы ASCII, это двоичный формат, с которым нельзя так работать.   -  person funnydman    schedule 01.07.2021
comment
Есть ли способ преобразовать двоичный формат в django в строку? @funnydman   -  person iyad hassan    schedule 01.07.2021