注意:FORM表单提交文件要有一个参数enctype="multipart/form-data"
一般上传:
1 def f1(request): 2 if request.method == "GET": 3 return render(request,'f1.html') 4 5 else: 6 import os #导入os模块 7 #request.get / post /FILES方式.get()取值 去文件name=fafafa的值 8 file_obj=request.FILES.get("fafafa") #拿到一个文件对象 9 f=open(os.path.join('static',file_obj.name),'wb') #将文件名加入到static目录下 10 for chunk in file_obj.chunks(): #chunk块 文件的大小,循环file_obj文件对象.chunks 11 f.write(chunk)#写到文件里面去 12 f.close() 13 # return HttpResponse(".....") 14 return render(request,'f1.html')
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <form method="POST" action="/f1/" enctype="multipart/form-data"> 9 {% csrf_token %} 10 <input type="text" name="user"> 11 <input type="file" name="fafafa" > 12 <input type="submit" value="提交"> 13 14 </form> 15 </body> 16 </html>
Form组件上传:
1 class F2Form(Form): 2 user=fields.CharField() 3 fafafa=fields.FileField() 4 5 6 def f2(request): 7 if request.method == "GET": 8 obj=F2Form() 9 return render(request,'f2.html',{'obj':obj}) 10 else: 11 obj=F2Form(data=request.POST,files=request.FILES) #以POST的方式获取到文件的所有对象 12 if obj.is_valid(): #校验拿取的文件对象 13 # print(obj.cleaned_data) 14 print(obj.cleaned_data.get('fafafa').name) #校验成功 获取上传文件对象的 fafafa 文件名 15 print(obj.cleaned_data.get('fafafa').size) #获取文件对象的fafafa size大小 16 return render(request,'f2.html',{'obj':obj}) #错误信息的时候 就返回到前端页面 继续上传
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <form method="POST" action="/f2/" enctype="multipart/form-data"> 9 {% csrf_token %} 10 {{ obj.user }} 11 {{ obj.fafafa }} 12 <input type="submit" value="提交"> 13 </form> 14 </body> 15 </html>