Как загрузить файл pdf и лист excel в одном сообщении?

У меня есть приложение django, и я пытаюсь загрузить файл pdf и файл excel с помощью одной функции submit.

Итак, функция pdf работает. Но если я пытаюсь загрузить лист excel, то получаю такую ошибку:

'utf-8' codec can't decode byte 0xa0 in position 16: invalid start byte

Но я тестировал функцию excel отдельно, и она работает. Но, очевидно, в сочетании с функцией pdf она не работает.

Так вот шаблон:

{% extends 'base.html' %} {% load static %} {% block content %}

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Create a Profile</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <link rel="stylesheet" type="text/css" href="{% static 'main/css/custom-style.css' %}" />
        <link rel="stylesheet" type="text/css" href="{% static 'main/css/bootstrap.css' %}" />
    </head>

    <body>
        <div class="container center">
            <span class="form-inline" role="form">
                <div class="inline-div">
                    <form class="form-inline" action="/controlepunt140" method="POST" enctype="multipart/form-data">

                        <div class="d-grid gap-3">
                            <div class="form-group">
                                {% csrf_token %}
                                {{ pdf_form }}

                            </div>
                            <div class="form-outline">
                                <div class="form-group">
                                    <textarea class="inline-txtarea form-control" id="content" cols="70" rows="25">
                                    {{content}}</textarea>
                                </div>
                            </div>
                        </div>

                        <div class="d-grid gap-3">
                            <div class="form-group">
                                {{ excel_form }}
                            </div>
                            <div class="form-outline">
                                <div class="form-group">
                                    <textarea class="inline-txtarea form-control" id="content" cols="70" rows="25">
                                    {{conten_excel}}</textarea>
                                </div>
                            </div>
                        </div>
                        <button type="submit" name="form_pdf" class="btn btn-warning">Upload!</button>
                    </form>
                </div>
            </span>
        </div>
    </body>

</html>
{% endblock content %}

и views.py:

class ReadingFile(View):
    def get(self, *args, **kwargs):
        pdf_form = UploadFileForm()
        excel_form = ExcelForm()

        return render(self.request, "main/controle_punt140.html", {
            'pdf_form': pdf_form, "excel_form": excel_form
        })

    def post(self, *args, **kwargs):
        filter_text = FilterText()
        types_of_encoding = ["utf8", "cp1252"]
        pdf_form = UploadFileForm(
            self.request.POST, self.request.FILES, prefix=" pdf")
        excel_form = ExcelForm(self.request.FILES,
                               self.request.FILES, prefix="excel")
        content = ''
        content_excel = ''

        if pdf_form.is_valid() and excel_form.is_valid() and 'upload_file' in self.request.FILES:
            uploadfile = UploadFile(image=self.request.FILES["upload_file"])
            excel_file = UploadFile(self.request.FILES["upload_file"])

            uploadfile.save()

            for encoding_type in types_of_encoding:
                with open(os.path.join(settings.MEDIA_ROOT, f"{uploadfile.image}"), 'r', encoding=encoding_type) as f:
                    if uploadfile.image.path.endswith('.pdf'):
                        content = filter_text.show_extracted_data_from_file(
                            uploadfile.image.path)
                    else:
                        content = f.read()

                    if uploadfile.image.path.endswith('xlsx'):
                        wb = openpyxl.load_workbook(excel_file)
                        worksheet = wb['Sheet1 ']
                        print(worksheet)
                        excel_data = list()
                        for row in worksheet.iter_rows():
                            row_data = list()
                            for cell in row:
                                row_data.append(str(cell.value))
                                excel_data.append(row_data)
                        print(excel_data)
                        content_excel = excel_data         

            return render(self.request, "main/controle_punt140.html", {
                'pdf_form':  pdf_form, 'excel_form': excel_form,
                "content": content, 'content_excel': content_excel
            })
     
        return render(self.request, "main/controle_punt140.html", {
            "pdf_form": UploadFileForm(), "excel_form": ExcelForm()
        })

forms.py:

class UploadFileForm(forms.Form):
    upload_file = forms.FileField(required=False)


class ExcelForm(forms.Form):
    upload_file = forms.FileField(required=False)

Вопрос: как загрузить файл pdf и лист excel одной функцией отправки?

Возможно, это связано с тем, что в вашем excel нет символов ascii. Попробуйте: encoding='unicode_escape'

Вернуться на верх