一,Django文件上传
1.概述
当Django在处理文件上传时,文件的数据被保存在request.FILES中
FILES中的每个键为中的name的值
file只有在请求的方式为POST并且提交表单中带有 enctype=“multipart/form-data”
2.配置储存路径
在static目录下创建media的目录
MEDIA_ROOT = os.path.join(BASE_DIR,“static/media”)
3.页面代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form method="POST" action="/upfile/" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file" /><hr/>
<input type="file" name="file" /><hr/>
<input type="file" name="pic" /><hr/>
<input type="submit" value="上传" />
</form>
</body>
</html>
4.FILES结构
5.视图处理文件
from django.conf import settings
def upfile(request):
if request.method == "GET":
return render(request, "upfile.html")
else:
for filekey in request.FILES:
files = request.FILES.getlist(filekey)
for fileObj in files:
filePath = r"%s/%s"%(settings.MEDIA_ROOT, fileObj.name)
# 存储
with open(filePath, "wb") as fp:
for info in fileObj.chunks():
fp.write(info)
return HttpResponse("上传文件成功")
6.头像上传逻辑
# user: 账号 密码 头像路径
# 判断文件的类型 png jpg
# if 是否是图片类型: fileObj.name的后缀
# 允许上传
# 图片压缩
# 将压缩后的图片上传到第三方服务器(七牛云存储)
# 第三方服务器会返回一个图片的链接地址,保存到用户系统
# else:
# 终止上传
7.图片压缩
from PIL import Image
im = Image.open('c.jpg')
print(im.format, im.size, im.mode)
im.thumbnail((200,100))
im.save("d.jpg", "JPEG")------ 存放在一个py文件中