获取: 使用requesy.FILES.get('file') 获取上传文件
表单注意
- 表单的enctype的值需要更改enctype="multipart/formdata"
- 表单提交类型为POST
存储路径
在settings.py文件下添加如下代码
在项目下(与App同级)创建static下创建文件夹upload
#设置上传文件路径
MEDIR_ROOT = os.path.join(BASE_DIR, 'static/upload')
创建上传文件的表单
模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/doUpload/" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>文件 <input type="file" name="file"></p>
<p><input type="submit" value="上传"></p>
</form>
{# 实现 通过JS点击一个小图片 可代替点击上传的按钮 #}
</body>
</html>
views.py
from django.conf import settings
import os
#文件上传处理
def doUpload(req):
file = req.FILES.get('file')
# print(file.name)
# print(file.size)
savePath = os.path.join(settings.MDEIA_ROOT,file.name)
# print(savePath)
with open(savePath,'wb') as f:
# f.write(file.read())
if file.multiple_chunks():
for myf in file.chunks():
f.write(myf)
print('大于2.5')
else:
print('小于2.5')
f.write(file.read())
return HttpResponse('文件上传')
文件上传对象的属性
- file.name 获取上传的名称
- file.size 获取上传文件的大小(字节)
方法:- file.read() 读取全部(适用于小文件)
- file.chunks() 按块来返回文件 通过for循环进行迭代 可以将大文件按照块来写入到服务器
- file.multiple_chunks() 判断文件 是否大于2.5M 返回True或者False 那么就可以判断是read还是chunks进行上传
image