Python Django文件上传
文件保存本地
view视图
def update(request): if request.method =='GET': return render(request,'update.html') else: myFile = request.FILES.get("img") #上传的文件是一个对象 print(myFile.name) print(myFile.size) f = open(myFile.name,'wb') for files in myFile.chunks(): f.write(files) return render(request,'update.html')
前端
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="update.html" method="post" enctype="multipart/form-data"> {% csrf_token %} 文件上传:<input type="file" name="img"> <input type="submit"> </form> </body> </html>
文件上传到数据库
首先 需要在setting中设置文件的存储路径
#一般创建static文件
MEDIA_ROOT = os.path.join(BASE_DIR,"static/...")
#在models中创建数据库 class Files(models.Model): photo_url = models.ImageField( upload_to='imgae' )
view视图
def files_ulr(request):
if request.method =='GET':
return render(request,'photo.html')
else:
myFile = request.FILES.get('img')
photo_url = models.Files.objects.create(photo_url=myFile)
return HttpResponse("ok")
通过Ajax上传文件
#HTML中编辑JQ语句 form action="update.html" method="post" enctype="multipart/form-data"> {% csrf_token %} 头像<input type="file" name="touxiang" id="file"> <br> <button id="btn">提交</button> </form> <script> $("#btn").click(function(){ {#ajax上传文件的时候需要这个类型,它会将添加的键值对加工成formata的类型#} var formdata = new FormData(); {##添加键值对的方法是append,注意写法,键和值之间使用逗号隔开#} formdata.append('file',$("#file")[0].files[0]); {#csrf_tocken#} formdata.append('csrfmiddlewaretoken',$('[name=csrfmiddlewaretoken]').val()); console.log(formdata) $.ajax({ 'url':'update.html', 'type':'post', 'data':formdata, {#不处理数据#} processData:false, contentType:false, success:function(arg){ console.log(arg) } }) }) </script>
#view中操作 if request.method =='GET': return render(request,'update.html') else: # name = request.POST.get('uname') file = request.FILES.get('touxiang') file_name = file.name # 拼接文件路径 # path = os.path.join('static','img',file_name) with open(file_name,'wb') as f: for i in file.chunks(): f.write(i) return render(request, 'update.html')