Django之上传文件

Django之上传文件

  最简单的文件上传方式:

  后端代码:   

def f1(request):
    if request.method == "GET":
        return render(request,"f1.html")
    else:
        import os
        print(request.FILES)  #这里是文件的数据   request.POST 是取文本的数据
        file_obj = request.FILES.get("fafafa")   #获取用户上传的文件
        print(file_obj.name)  #文件名
        print(file_obj.size)  #文件大小
        f = open(os.path.join("static",file_obj.name),"wb")
        for chunk in file_obj.chunks():
            f.write(chunk)
        f.close()
        return render(request,"f1.html")

  前端代码:


"en">

    "UTF-8">
    Title


    
"post" action="/f1/" enctype="multipart/form-data"> {% csrf_token %} "file" name="fafafa"> "submit" value="提交">

  基于Form验证的文件操作:

    后端操作:

class F2Form(Form):
    user = fields.CharField()
    fafafa = fields.FileField()

def f2(request):
    """
    文件上传
    :param request:
    :return:
    """
    if request.method == "GET":
        obj = F2Form()
        return render(request,"f2.html",{"obj":obj})
    else:
        obj = F2Form(data=request.POST,files=request.FILES)
        if obj.is_valid():
            print(obj.cleaned_data.get("fafafa").name) #拿文件名
            print(obj.cleaned_data.get("fafafa").size) #拿文件大小
        return render(request,"f2.html",{"obj":obj})

    前端代码:


"en">

    "UTF-8">
    Title


    
"post" action="/f2/" enctype="multipart/form-data"> {% csrf_token %} {{ obj.user }} {{ obj.fafafa }} "submit" value="提交">

   Ajax 的上传文件:

    1.XMLHttpResponse方式:

    后端:

import os
def upload(request):
    if  request.method == "GET":
        return render(request,'upload.html')
    else:
        print(request.POST,request.FILES)
        file_obj = request.FILES.get('fafafa')
        file_path = os.path.join("static",file_obj.name)
        with open(file_path,'wb') as f:
            for chunk in file_obj.chunks():
                f.write(chunk)
        return HttpResponse(file_path)

    前端:


"en">

    "UTF-8">
    


    

原生Ajax上传文件

"file" id="i1" /> "upload1();">上传
"container1">
//存放路径

 

    2.jQuery Ajax方式:

    前端:


"en">

    "UTF-8">
    

    
    

jQuery Ajax上传文件

"file" id="i2" /> "upload2();">上传
"container2">
//存放路径

 

    3.伪Ajax方式:

    前端:伪Ajax上传解决了浏览器低版本问题,应用了iframe提交form表单不刷新页面的特点。


"en">

    "UTF-8">
    


    

伪 Ajax上传文件

"f1" method="POST" action="/upload/" target="ifr" enctype="multipart/form-data"> "file" name="fafafa" /> "upload3();">上传
"container3">

 

----- END ------

转载于:https://www.cnblogs.com/george92/p/11481530.html

你可能感兴趣的:(Django之上传文件)