Django file upload не загружает файл?
Я создал загрузку файла примерно следующим образом:
DataUpload - это представление, которое обрабатывает отрисовку шаблона, а handle_uploaded_file - это функция, которая читает файл.
View.py
def DataUpload(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
print(request.FILES['file'])
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/success/url/')
else:
form = UploadFileForm()
return render(request, 'DataBase/upload.html', {'form': form})
def handle_uploaded_file(f):
with open(os.getcwd()+f, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
url
url(r'DataUpload', views.DataUpload, name='DataUpload'),
forms.py
from django import forms
class Rand_Frag_From(forms.Form):
Seq = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Tropomyosin beta chain '}),required=False)
Acc = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'P02671 '}), required=True)
class UploadFileForm(forms.Form):
file = forms.FileField()
шаблон
{% load static %}
<link rel="stylesheet" href="{% static 'css/table/custom.css' %}">
<div class="main">
<div class="site-content">
<div class="mdl-grid site-max-width">
<div class="mdl-cell mdl-cell--12-col mdl-card mdl-shadow--4dp page-content">
<div class="mdl-grid">
<form action="{%url 'DataUpload' %}" method="POST" class="form-contact">
{%csrf_token%}
</div>
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
{{form.file}}
</div>
<button class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent" type="submit">
Submit
</button>
</form>
</div></div>
</div>
</div>
</div>
</div>
</div>
журнал консоли после отправки формы
Quit the server with CONTROL-C.
[22/Dec/2022 15:14:19] "POST /DataUpload HTTP/1.1" 200 1317
У меня нигде не возникает ошибки, но файл не загружается.
Я исправил проблему и опубликовал решение здесь, чтобы она не беспокоила никого в будущем.
Первое, что я изменил, это добавил enctype="multipart/form-data"
для предотвращения тихой ошибки invalid form issues.
<form action="{%url 'DataUpload' %}" method="POST" enctype="multipart/form-data" class="form-contact">
Во-вторых, f
- это объект некоторого класса в Django, поэтому я просто изменил его на f.name
def handle_uploaded_file(f):
with open(os.getcwd()+f.name, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
Наконец, все сработало отлично. Спасибо