django中处理文件上传文件

时间:2023-03-08 18:19:00
django中处理文件上传文件

1 template模版文件uploadfile.html

特别注意的是,只有当request方法是POST,且发送request的<form>有属性enctype="multipart/form-data"时,request.FILES中包含文件数据,否则request.FILES为空。

<form method="post" action="" enctype="multipart/form-data" >
<input type="file" name="personico" /><br /><br /><br />
<input type="submit" value="提交"/>
</form>
<img src="/static/jpg/{{personico}}" width="100px" height="100px" alt="头像" />

2 视图函数

if request.method == "POST":
f = request.FILES.get('personico')
baseDir = os.path.dirname(os.path.abspath(__name__));
jpgdir = os.path.join(baseDir,'static','jpg'); filename = os.path.join(jpgdir,f.name);
fobj = open(filename,'wb');
for chrunk in f.chunks():
fobj.write(chrunk);
fobj.close();
return render_to_response('uploadfile.htm',{'personico':f.name}); else:
return render_to_response('uploadfile.htm');

此处说明:将上传的文件存放在工程目录下的static/jpg/目录下,文件名就是上传的文件名,只是实验性的所以没有加错误验证,如果用于生产环境,需要严格验证,比如文件是否存在、读写错误等。

上传的文件在request.FILES,是一个近似字典类型的数据类型,拥有基本的4个基本属性,name文件名/size文件大小(以字节为单位)/content_type文件类型/read文件内容

拥有的方法chunks()返回一个上传文件的分块生成器,有一个可选参数是设置每次读取的字节数。如果上传的文件很大,使用这个方法可以节省内存,不会一下子占用大量内存空间。

上传文件保存的位置
保存上传文件前,数据需要存放在某个位置。默认时,当上传文件小于2.5M时,django会将上传文件的全部内容读进内存。意味着保存文件只有一次从内存读取,一次写磁盘。
但当上传文件很大时,django会把上传文件写到临时文件中,然后存放到系统临时文件夹中。

三个设置控制django文件上传的行为:
FILE_UPLOAD_MAX_MEMORY_SIZE:直接读入内存的最大上传文件大小(字节数)。当大于此值时,文件存放到磁盘。默认2.5M字节
FILE_UPLOAD_TEMP_DIR
FILE_UPLOAD_PERMISSIONS:权限
FILE_UPLOAD_HANDLERS
上传文件真正的处理器。修改此项设置可以完成自定义django上传文件的过程。
默认是:

("django.core.files.uploadhandler.MemoryFileUploadHandler",
"django.core.files.uploadhandler.TemporaryFileUploadHandler",)

先尝试装入内存,如不行就存入到临时文件。

实验效果:

上传前效果

django中处理文件上传文件

上传后效果

django中处理文件上传文件