我已经尝试上传一个简单的文本文件了几个小时,但似乎仍然无法正常工作。
我不断收到无效的表格,说我缺少“ file_source”。
为什么“ file_source”没有发布?
我还可以发送“ file_source”,但是它仍然说它丢失了。应该为Django FileFiled提供哪种类型的元素?
Django表格:
class FileUploadForm(forms.Form): file_source = forms.FileField()
Django模板(呈报形式):
<form action="/upload/" method="post" id="file-upload-form" enctype="multipart/form-data"> {% csrf_token %} {{ form }} <button type="submit" class="btn btn-primary" id='upload-btn'>Upload</button> </form>
jQuery / Ajax上传:
function uploadFile() { $.ajax({ data: $(this).serialize(), type: $(this).attr('method'), url: $(this).attr('action') }); return false; } $(function() { $('#file-upload-form').submit(uploadFile); });
收到POST的Django视图:
def upload_view(request): if request.is_ajax(): form = FileUploadForm(request.POST) if form.is_valid(): print 'valid form' else: print 'invalid form' print form.errors return HttpResponseRedirect('/ingest/')
这是我为了使其工作而进行的更改。
我用FormData打包来自表单的数据
注意Django视图中表单的参数。我之前没有指定“文件”,这就是导致“文件字段必填”错误的原因。
Javascript:
function upload(event) { event.preventDefault(); var data = new FormData($('form').get(0)); $.ajax({ url: $(this).attr('action'), type: $(this).attr('method'), data: data, cache: false, processData: false, contentType: false, success: function(data) { alert('success'); } }); return false; } $(function() { $('form').submit(upload); });
Django视图:
def upload_view(request): if request.method == 'POST': form = FileUploadForm(data=request.POST, files=request.FILES) if form.is_valid(): print 'valid form' else: print 'invalid form' print form.errors return HttpResponseRedirect('/ingest/')