• 第二百七十三节,Tornado框架-文件上传


    Tornado框架-文件上传

    第一、普通表单上传文件

    self.request.files["fafafa"] 获取上传文件信息,参数["上传文件框的name名称"]
    ['filename']获取上传文件的名称
    ['body']获取上传文件的内容

    框架引擎

    #!/usr/bin/env python
    #coding:utf-8
    
    import tornado.ioloop
    import tornado.web                                              #导入tornado模块下的web文件
    
    class dluHandler(tornado.web.RequestHandler):
        def get(self):
            self.render("dlu.html")
        def post(self):
            file_metas = self.request.files["fafafa"]               #获取上传文件信息
            for meta in file_metas:                                 #循环文件信息
                file_name = meta['filename']                        #获取文件的名称
                import os                                           #引入os路径处理模块
                with open(os.path.join('statics','img',file_name),'wb') as up:            #os拼接文件保存路径,以字节码模式打开
                    up.write(meta['body'])                                                #将文件写入到保存路径目录
    
    settings = {                                            #html文件归类配置,设置一个字典
        "template_path":"views",                            #键为template_path固定的,值为要存放HTML的文件夹名称
        "static_path":"statics",                            #键为static_path固定的,值为要存放js和css的文件夹名称
    }
    
    #路由映射
    application = tornado.web.Application([                 #创建一个变量等于tornado.web下的Application方法
        (r"/dlu", dluHandler),
    ],**settings)                                           #将html文件归类配置字典,写在路由映射的第二个参数里
    
    if __name__ == "__main__":
        #内部socket运行起来
        application.listen(8888)                            #设置端口
        tornado.ioloop.IOLoop.instance().start() 

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script type="text/javascript" src='{{static_url("jquery.min.js")}}' charset="UTF-8"></script>
    </head>
    <body>
    <form id="my_form" name="form" action="/dlu" method="POST" enctype="multipart/form-data">
        <div id="main">
            <input name="favor" type="text"/>
            <input name="fafafa" id="my_file" type="file"/>
            <input type="submit" value="提交"/>
        </div>
    </form>
    </body>
    </html>

    第二、jquery的ajax上传文件

    注意:FormData();创建表单对象兼容性不好,不推荐

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script type="text/javascript" src='{{static_url("jquery.min.js")}}' charset="UTF-8"></script>
    </head>
    <body>
        <input class="shchlj" type="text" name="luj"/>
        <input type="file" id="img" />
        <input type="button" value="上传" onclick="UploadFile();" />
        <script>
            function UploadFile(){
                var fileObj = $("#img")[0].files[0];        //获取上传文件名称
                var form = new FormData();                  //创建表单对象
                form.append("k1", "v1");                    //向表单对象添加name和value
                form.append("fff", fileObj);                //向表单对象添加name和value,将上传文件名称添加到value
    
                $.ajax({                                    //jquery的ajax提交
                    type: 'POST',
                    url: '/dlu',
                    data: form,                             //提交数据为表单对象
                    processData: false,                     //默认为 true,数据被处理为 URL 编码格式。如果为 false,则阻止将传入的数据处理为 URL 编码的格式。
                    contentType: false,                     //指 定 请 求 内 容 的 类 型
                    success: function (response, status, xhr) {      //提交成功
                        $('.shchlj').val(response)                   //将返回文件的服务器上传路径,添加到输入框值
                    },
                    error: function (xhr, errorText, errorStatus) {  //如果发生错误,返回错误信息
    
                    }
    
                })
            }
        </script>
    </body>
    </html>

    框架引擎

    #!/usr/bin/env python
    #coding:utf-8
    
    import tornado.ioloop
    import tornado.web                                              #导入tornado模块下的web文件
    import session_lei                                              #导入session模块
    
    class dluHandler(tornado.web.RequestHandler):
        def get(self):
            self.render("dlu.html")
        def post(self):
            file_metas = self.request.files["fff"]               #获取上传文件信息
            for meta in file_metas:                                 #循环文件信息
                file_name = meta['filename']                        #获取文件的名称
                import os                                           #引入os路径处理模块
                with open(os.path.join('statics','img',file_name),'wb') as up:            #os拼接文件保存路径,以字节码模式打开
                    up.write(meta['body'])                                                #将文件写入到保存路径目录
                    self.write(os.path.join('statics','img',file_name))                   #将上传好的路径返回
    
    settings = {                                            #html文件归类配置,设置一个字典
        "template_path":"views",                            #键为template_path固定的,值为要存放HTML的文件夹名称
        "static_path":"statics",                            #键为static_path固定的,值为要存放js和css的文件夹名称
    }
    
    #路由映射
    application = tornado.web.Application([                 #创建一个变量等于tornado.web下的Application方法
        (r"/dlu", dluHandler),
    ],**settings)                                           #将html文件归类配置字典,写在路由映射的第二个参数里
    
    if __name__ == "__main__":
        #内部socket运行起来
        application.listen(8888)                            #设置端口
        tornado.ioloop.IOLoop.instance().start()

    第三、利用iframe框架上传文件

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script type="text/javascript" src='{{static_url("jquery.min.js")}}' charset="UTF-8"></script>
    </head>
    <body>
    <form id="my_form" name="form" action="/dlu" method="POST" enctype="multipart/form-data">
        <div id="main">
            <input class="shchlj" type="text" name="luj"/>
            <input name="fff" id="my_file" type="file"/>
            <input type="button" name="action" value="Upload" onclick="redirect()"/>
            <iframe style="display: none;" id='my_iframe' name='my_iframe' src="" class="hide"></iframe>
        </div>
    </form>
    <script>
        function redirect() {
            document.getElementById('my_iframe').onload = Testt;       //等待框架加载完成后执行Testt函数
            document.getElementById('my_form').target = 'my_iframe';   //target属性告诉浏览器希望将所链接的资源显示在哪里,提交后返回数据将显示到框架里
            document.getElementById('my_form').submit();               //执行提交方法
    
        }
    
        function Testt(ths) {                                          //框架加载完成后执行Testt函数
            var t = $("#my_iframe").contents().find("body").text();    //contents(),获取某元素下面所有元素节点,包括文本节点,如果是 iframe,则可以查找文本内容,集合元素
            $('.shchlj').val(t);                                       //获取框架里的返回内容,写入输入框
        }
    </script>
    </body>
    </html>

    框架引擎

    #!/usr/bin/env python
    #coding:utf-8
    
    import tornado.ioloop
    import tornado.web                                              #导入tornado模块下的web文件
    import session_lei                                              #导入session模块
    
    class dluHandler(tornado.web.RequestHandler):
        def get(self):
            self.render("dlu.html")
        def post(self):
            file_metas = self.request.files["fff"]               #获取上传文件信息
            for meta in file_metas:                                 #循环文件信息
                file_name = meta['filename']                        #获取文件的名称
                import os                                           #引入os路径处理模块
                with open(os.path.join('statics','img',file_name),'wb') as up:            #os拼接文件保存路径,以字节码模式打开
                    up.write(meta['body'])                                                #将文件写入到保存路径目录
                    self.write(os.path.join('statics','img',file_name))                   #将上传好的路径返回
    
    settings = {                                            #html文件归类配置,设置一个字典
        "template_path":"views",                            #键为template_path固定的,值为要存放HTML的文件夹名称
        "static_path":"statics",                            #键为static_path固定的,值为要存放js和css的文件夹名称
    }
    
    #路由映射
    application = tornado.web.Application([                 #创建一个变量等于tornado.web下的Application方法
        (r"/dlu", dluHandler),
    ],**settings)                                           #将html文件归类配置字典,写在路由映射的第二个参数里
    
    if __name__ == "__main__":
        #内部socket运行起来
        application.listen(8888)                            #设置端口
        tornado.ioloop.IOLoop.instance().start()

    第四、jquery.form.js表单插件上传文件【推荐】

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script type="text/javascript" src='{{static_url("jquery.min.js")}}' charset="UTF-8"></script>
        <script type="text/javascript" src='{{static_url("jquery.form.js")}}' charset="UTF-8"></script>
    </head>
    <body>
    <form id="my_form" name="form" action="/dlu" method="POST" enctype="multipart/form-data">
        <div id="main">
            <input class="shchlj" type="text" name="luj"/>
            <input name="fff" id="my_file" type="file"/>
            <input type="submit" value="上传"/>
        </div>
    </form>
    <script>
        $('#my_form').ajaxForm({                                        //jquery.form.js,表单提交插件,会自动阻止跳转
            url: '/dlu',                                                //设置提交的 url,可覆盖 action 属性
            type: 'POST',                                               //GET,POST
            beforeSubmit: function (formData, jqForm, options) {        //提交前的验证
    
            },
            success: function (responseText, statusText) {              //提交成功后的操作
                $('.shchlj').val(responseText);                         //将服务器返回路径写入输入框
            },
            error: function (event, errorText, errorType) {             //错误时调用,提交失败的操作
    
            }
        });
    </script>
    </body>
    </html>

    框架引擎

    #!/usr/bin/env python
    #coding:utf-8
    
    import tornado.ioloop
    import tornado.web                                              #导入tornado模块下的web文件
    import session_lei                                              #导入session模块
    
    class dluHandler(tornado.web.RequestHandler):
        def get(self):
            self.render("dlu.html")
        def post(self):
            file_metas = self.request.files["fff"]               #获取上传文件信息
            for meta in file_metas:                                 #循环文件信息
                file_name = meta['filename']                        #获取文件的名称
                import os                                           #引入os路径处理模块
                with open(os.path.join('statics','img',file_name),'wb') as up:            #os拼接文件保存路径,以字节码模式打开
                    up.write(meta['body'])                                                #将文件写入到保存路径目录
                    self.write(os.path.join('statics','img',file_name))                   #将上传好的路径返回
    
    settings = {                                            #html文件归类配置,设置一个字典
        "template_path":"views",                            #键为template_path固定的,值为要存放HTML的文件夹名称
        "static_path":"statics",                            #键为static_path固定的,值为要存放js和css的文件夹名称
    }
    
    #路由映射
    application = tornado.web.Application([                 #创建一个变量等于tornado.web下的Application方法
        (r"/dlu", dluHandler),
    ],**settings)                                           #将html文件归类配置字典,写在路由映射的第二个参数里
    
    if __name__ == "__main__":
        #内部socket运行起来
        application.listen(8888)                            #设置端口
        tornado.ioloop.IOLoop.instance().start()
  • 相关阅读:
    jvm启动参数调优
    程序员之在plmm面前清新脱俗的装逼
    .gradle文件配置
    fan greatwall
    归档
    关于
    Navicat Premium 15 永久激活版安装教程
    Python+unittest+requests 接口自动化测试框架搭建 完整的框架搭建过程 实战
    通过pycharm使用git和github的步骤(图文详解)
    Ubuntu-18.04.1-live-server-amd64.iso安装全过程
  • 原文地址:https://www.cnblogs.com/adc8868/p/6908469.html
Copyright © 2020-2023  润新知