我不明白为什么,但如果我尝试通过 ajax 上传文件,它不起作用,但对于常规请求,它可以。
打印了请求.FILES。
#For ajax request
<MultiValueDict: {}>
#For regular request
<MultiValueDict: {u'file': [<TemporaryUploadedFile: IMG_3056.JPG (image/jpeg)>]}>
#Here's my front-end and back-end code
<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
...
</form>
function submitForm(target, form){
$.ajax({
url:form.attr('action'),
type:'post',
data:form.serialize(),
dataType:"html",
error:function(data, status, xhr){
error();
},
beforeSend:function(){
loading();
},
success:function(data, status, xhr){
$(target).html(data);
},
complete:function(){
loadingDone();
}
});
}
#views.py
def file_upload(request):
doc_form = DocumentForm(user = request.user)
if request.method == 'POST':
doc_form = DocumentForm(request.POST, request.FILES, user = request.user)
print request.FILES
if doc_form.is_valid():
document = doc_form.save()
return render_to_response("create_doc.html", { 'doc_form':doc_form,
}, context_instance = template.RequestContext(request))
最佳答案
使用常规 jQuery 的 AJAX 上传文件不起作用。请参阅其中一些链接以获取帮助:
http://www.nickdesteffen.com/blog/file-uploading-over-ajax-using-html5
How can I upload files asynchronously?
Sending multipart/formdata with jQuery.ajax
基本上,HTML 5 中有一个新的 API 用于处理文件,或者传统的方法是使用 iFrame/Flash。我个人使用Uploadify几个月前的一个项目。
关于Django:文件上传不适用于 Ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14026889/