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")[].files[]; //获取上传文件名称
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()

第二百七十三节,Tornado框架-文件上传的更多相关文章

  1. 第二百七十二节,Tornado框架-iframe标签框架伪造ajax

    Tornado框架-iframe标签框架伪造ajax html <!DOCTYPE html> <html> <head lang="en"> ...

  2. 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表

    第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表.验证码表.轮播图表 创建Django项目 项目 settings.py ...

  3. ssh框架文件上传下载

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 基于tornado的文件上传demo

    这里,web框架是tornado的4.0版本,文件上传组件,是用的bootstrap-fileinput. 这个小demo,是给合作伙伴提供的,模拟APP上摄像头拍照,上传给后台服务进行图像识别用,识 ...

  5. 十九、多文件上传(ajaxFileupload实现多文件上传功能)

    来源于https://www.jb51.net/article/128647.htm 打开google 搜索"ajaxFileupload' ‘多文件上传"可以搜到许许多多类似的, ...

  6. SSH,SSM框架文件上传

    一.了解文件上传 1.1        什么是文件上传 将本地文件通过流的形式写到服务器上 1.2        文件上传的技术 JspSmartUpload: 其组件是应用jsp进行B/S程序开发过 ...

  7. salesforce 零基础学习(四十二)简单文件上传下载

    项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...

  8. 十六、Struts2文件上传与下载

    文件上传与下载 1.文件上传前提:<form action="${pageContext.request.contextPath}/*" method="post& ...

  9. tp框架-----文件上传

    之前也做过文件上传,现在学了tp,用tp怎么做呢? 第一步:做一个Wenjian控制器: <?php namespace Ceshi\Controller; use Think\Controll ...

随机推荐

  1. webpack 通用模块(每个页面都用到的js)编译

    1.项目目录 2.配置文件:webpack.config.js var htmlWebpackPlugin = require('html-webpack-plugin'); var webpack ...

  2. CLightLock:一个简单AutoLock

    原理: 标准的RAII, 利用构造函数进行加锁,利用析构函数进行解锁. #ifndef _C_LIGTHT_LOCK_HPP #define _C_LIGTHT_LOCK_HPP class CLig ...

  3. Git 修改用户名以及提交邮箱

    问题背景: 在已毕业师兄的电脑上提交自己的 Github 代码,(尽管有重新设置了 自己的SSH),但是 Github网站提交结果却显示师兄提交的: 验证当前本地属性: 怎么知道本地有设置?git c ...

  4. IT路上的应该注意自我规划 学习规划与自我修炼

    http://www.nowamagic.net/librarys/veda/detail/607 IT路漫漫,你需要明确自己所处的位置,并作出相应的规划,这条路才能够走得更加顺畅.下面是参考: 初学 ...

  5. Redis总结(一)Redis安装(转载)

    最近项目中需要使用Redis,刚好这两天有时间,便总结记录一下Redis的安装,以及如何在.NET中使用Redis. Redis是一个用的比较广泛的Key/Value的内存数据库.目前新浪微博.Git ...

  6. SQL SERVER 2005允许自定义聚合函数

    不多说了,说明后面是完整的代码,用来将字符串型的字段的各行的值拼成一个大字符串,也就是通常所说的Concat 例如有如下表dict  ID  NAME  CATEGORY  1 RED  COLOR  ...

  7. 剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)

    一.移除性算法 (remove)  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...

  8. Objective-C中的基本数据类型

    // // main.m // 01.基本数据类型 // // Created by zhangqs008 on 14-2-13. // Copyright (c) 2014年 zhangqs008. ...

  9. Hadoop知识汇总

    Hadoop的两大功能:海量数据存储和海量数据分析 Hadoop2的三大核心组件是:HDFS.MapperReducer和yarn 1.HDFS:分布式文件系统海量数据存储 2.MapperReduc ...

  10. hdu 2987最大权闭合图模板类型题

    /* 最大权闭合图模板类型的题,考验对知识概念的理解. 题意:如今要辞退一部分员工.辞退每个员工能够的到一部分利益(能够是负的),而且辞退员工,必须辞退他的下属.求最大利益和辞退的最小人数. 最大权闭 ...