【问题标题】:Django: File upload not working with AjaxDjango:文件上传不适用于 Ajax
【发布时间】:2012-12-25 01:03:13
【问题描述】:

我不明白为什么,但如果我尝试通过 ajax 上传文件,它不起作用,但通过常规请求它会起作用。

打印 request.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))

【问题讨论】:

    标签: django jquery


    【解决方案1】:

    使用常规 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

    【讨论】:

    • 谢谢,不知道jquery ajax函数不支持多部分数据传输
    【解决方案2】:

    请尝试使用这个jquery form submit plugin,我认为它会按照您的需要将文件发送到服务器。

    (它适用于我的 PHP 服务器端,没有理由对你也不起作用)

    【讨论】:

      猜你喜欢
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多