Django之文件上传
form表单 上传
html代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/index/" method="post" enctype="multipart/form-data"> {% csrf_token %} <p><input type="text" name="user" id="user"></p> <p><input type="file" name="myFile" id="file"></p> <input type="submit"> </form> </body> </html>
django中views:
from django.shortcuts import render # Create your views here. import os def index(request): if request.method=='POST': print(request.POST) file_obj=request.FILES.get("myFile") with open(file_obj.name,"wb") as f: for line in file_obj: f.write(line) return render(request,"index.html")
djang的urls:
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), ]
【注意】文件上传默认存放在项目目录下面。
ajax上传
FormData是什么呢?
XMLHttpRequest Level 2添加了一个新的接口
FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件.所有主流浏览器的较新版本都已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+。
HTML:
</head> <body> <form action="/index/" method="post" enctype="multipart/form-data"> {% csrf_token %} <p><input type="text" name="user" id="user"></p> <p><input type="file" name="myFile" id="file"></p> <input type="submit"> </form> <hr> <button>ajaxSend</button> <script> $("button").click(function () { var formdata=new FormData(); formdata.append("username",$("#user").val()); formdata.append("imgFile",$("#file")[0].files[0]); formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val()); $.ajax({ url:"/index/", type:"POST", data:formdata, // processData:false, contentType:false, success:function (data) { console.log(data) } }) }) </script> </body> </html>
django的views;
from django.shortcuts import render,HttpResponse # from app01 import forms # Create your views here. import os def index(request): if request.is_ajax(): print("POST:",request.POST) print("FILES:",request.FILES) return HttpResponse("上传成功") return render(request,"index.html")
结果:
[15/Dec/2017 15:12:40] "POST /index/ HTTP/1.1" 200 12 POST: <QueryDict: {'username': [''], 'csrfmiddlewaretoken': ['gwDeotVXZPLBNZ1FL01DKx3O7XUTpLmHiYDgcSFnmMmymyVBtJamkAU1qlq4Z1Y4']}> FILES: <MultiValueDict: {'imgFile': [<InMemoryUploadedFile: 微信图片_20170705172111.jpg (image/jpeg)>]}>

浙公网安备 33010602011771号