【发布时间】:2020-11-14 05:54:00
【问题描述】:
我使用 FileField 构建了一个表单,以便上传要处理的文件。奇怪的是,在我可以在视图中执行任何操作之前,文件似乎已关闭。验证表单后遇到 ValueError:
"对关闭文件的 I/O 操作"
我可以看到该文件已正确检测到,但在尝试读取时已关闭。
注意:Django 版本 2.2.25。
forms.py
class FileImportForm(forms.Form):
headers = ["lastname","firstname","gender","title","entity","email","company","address","phone"]
file = forms.FileField(label='CSV file',validators=[CsvFileValidator(headers)])
def clean_file(self):
file = self.cleaned_data['file']
return file
views.py
@login_required
def file_import(request):
if request.method == 'POST':
form = FileImportForm(request.POST,request.FILES)
if form.is_valid():
if request.FILES['file']:
file_post = request.FILES['file']
# Offending line below (I/O operation on closed file)
file_content = file_post.read().decode('UTF-8')
return redirect("/foo")
else:
form = FileImportForm()
return render(request,"file_import.html", { 'form': form })
如何正确处理上传的文件(读取等)?
【问题讨论】:
标签: python-3.x django forms file