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",)

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

    实验效果:

    上传前效果

    上传后效果

  • 相关阅读:
    vue环境搭建
    'vue' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    文件上传
    json字符串解析为java对象
    自定义登录控制类Demo
    分页后台代码Demo
    主键回显
    angularjs变量的三种表示方式
    js往后台传参的方式
    同一路径下jsp能访问到,html不能访问到
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/5633154.html
Copyright © 2011-2022 走看看