【发布时间】:2013-12-22 06:54:42
【问题描述】:
我正在尝试使用 dropzone.js 在一个请求中上传多个文件。当我在 dropzone 中将 uploadMultiple 选项设置为 true 时,包含两个文件的一个请求被发送到我的视图,但表单验证失败。
这是我的 Django 表单:
class UploadForm(forms.Form):
data = forms.IntegerField(widget=forms.HiddenInput())
file = forms.FileField()
我的看法:
def upload(request):
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
print request.FILES
if form.is_valid():
for file in request.FILES.getlist('file'):
print str(file)
else:
print form.errors
else:
form = UploadForm(initial={'data': 5})
return render(request, 'upload.html', {
'form': form
})
还有我的模板:
<script type="text/javascript">
Dropzone.options.myAwesomeDropzone = {
autoProcessQueue : false,
uploadMultiple: true,
init : function() {
myDropzone = this;
this.element.querySelector("input[type='submit']").addEventListener('click', function(event) {
event.preventDefault();
event.stopPropagation();
myDropzone.processQueue();
});
}
}
</script>
<form id='my-awesome-dropzone' class="dropzone"
action="{% url 'upload.views.upload' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.data }}
<input type="submit" value="Upload" />
</form>
我看到request.FILES 有两个文件:
<MultiValueDict: {u'file[]': [<InMemoryUploadedFile: Forest Flowers.jpg (image/jpeg)>,
<InMemoryUploadedFile: Forest.jpg (image/jpeg)>]}>
我猜问题是 Django 无法识别 file[]。它期望 file 代替。如何让 Django 识别这两个上传?
【问题讨论】:
-
您绝对可以进行多文件上传。过去我用 dropzone 和 django 做到了这一点,但是我现在不在办公室,所以我无法复制代码的重要方面来给你提示。我记得我是从这篇文章开始开发的:mechanicalgirl.com/post/… - 它应该回答你的最后一个问题
-
你可以用这个
for file in request.FILES.getlist('file[]'): print str(file) -
@furins ,我已经使用 django 模板实现了 dropzone,但是图像没有在服务器端上传。你能建议我出了什么问题吗?我也浏览了你提到的链接也
-
@MegaBytes:你得到一个特定的错误吗?你有一些我可以查看的代码来重现它吗?最后,如果它与 user2233706 或mechanicalgirl 的不同,请考虑打开一个新问题。
-
@furins,
MultiValueDictKeyError at /saveimages/并说请求中没有文件数据,是的,我用代码 sn-p 提出了一个新问题。
标签: django dropzone.js