第二百七十三节,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()

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM