Как загрузить файл 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'