django中处理文件上传文件

Posted pclover11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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处理上传文件配置

Django——文件上传

django文件上传

Django处理文件上传File Uploads

django定义接口处理文件上传问题

浏览器上传文件+django后台处理