最近还是被django的上传大文件搞得晕头转向,转而看了这方面的原理,把自己的心得写了出来。
首先,我想说:如果你使用的是django默认的FileField的形式通过表单上传,那么其实你完全不需要管理如何上传,或者自己去写一个分块读取写入的函数,
这个是django已经帮你做完了。
表单接收到的上传文件数据在还没有被我们完全接收时,数据存放在哪里?
1默认,上传文件<2.5M,Django放在内存里
2大文件,会将文件写入到临时文件中
这个文件在临时文件路径中,上传完毕,将调用View中的
_Upload()方法将临时文件夹中的临时文件
分块写到上传文件的存放路径下,每块的大小为64K,写完后临时
文件将被删除。
注意第二点:django已经实现了把大文件拆分成块帮你读取,并实现上传,因此即使你存在大文件上传,速度比较慢,并不要紧,django已经帮你处理了。
了解到这里,我依然会把其他原理部分讲解一下:
headImg =request.FILES["headImg"]
request.FILES:文件怎么被存储在磁盘上或者内icunzhong
一个处理表单的视图将在request.FILES中接受文件数据,它是字典。
可以通过request.FILES[“file”]键来访问
uf = UploadFileForm(request.POST,request.FILES)