文件保存本地
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\')