我有一个具有以下标题的表单:
<form enctype="multipart/form-data" target="invisible" action="/calendar/createEvent/" method="POST">
和以下正文:
<input class="multiFileInput" type="file" name="files" onchange="newInput();">
<input class="multiFileInput" type="file" name="files" onchange="newInput()">
<input class="multiFileInput" type="file" name="files" onchange="newInput()">
与许多其他输入一起,但文件上传是重要的。
这个表单被提交到我的 View 中,除了文件上传之外,所有的事情都是正确的。
当我在 View 中执行“print request.FILES”时,我得到:
<MultiValueDict: {u'files': [<TemporaryUploadedFile: boson.mp3 (audio/mpeg)>, <TemporaryUploadedFile: hadron.mp3 (audio/mpeg)>]}>
但是当我尝试对它们做更多事情时,它不会让我将它们用作文件。
例如,假设我有以下表格:
class File(models.Model):
file = models.FileField(upload_to='files')
class Test(models.Model):
name = models.CharField(max_length=10)
files = models.ManyToManyField(File, related_name='files')
如果在我看来我说:
for f in request.FILES['files']:
test = Test()
test.name='test'
test.save
empt = File()
empt.file = f
empt.save()
test.files.add(empt)
我得到以下异常:
DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte. You passed in '\xff\xfb\xe0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Info\x00\x00\x00\x0f\x00\x00\x98C\x02m~\t\x00\x03\x05\x08\n'
另外,如果我尝试使用 f.chunks() 写入目的地,我会得到
AttributeError: 'str' object has no attribute 'chunks'
任何形式的帮助将不胜感激。我已经坚持了一段时间,希望得到一些帮助
最佳答案
您应该使用 getlist 访问多部分值,即:
for afile in request.FILES.getlist('files'):
File(file=afile, files=test).save()
当您使用
request.FILES['files']
时,我认为它不会将列表作为 python 列表获取。 .另外,如果您想使用 HTML5 多文件上传而不是多文件形式,请查看此处:django form with multiple file fields
关于Django 多文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7183830/