zoukankan      html  css  js  c++  java
  • 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",)

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

    实验效果:

    上传前效果

    上传后效果

  • 相关阅读:
    线段树专辑—— pku 1436 Horizontally Visible Segments
    线段树专辑——pku 3667 Hotel
    线段树专辑——hdu 1540 Tunnel Warfare
    线段树专辑—— hdu 1828 Picture
    线段树专辑—— hdu 1542 Atlantis
    线段树专辑 —— pku 2482 Stars in Your Window
    线段树专辑 —— pku 3225 Help with Intervals
    线段树专辑—— hdu 1255 覆盖的面积
    线段树专辑—— hdu 3016 Man Down
    Ajax跨域访问
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/5633154.html
Copyright © 2011-2022 走看看