tornado框架2.4_上传文件

.上传文件
form标签:
enctype="multipart/form-data"
Ajax(不刷新):
formData()(相当form标签)
XMLHttpRequest
jquery
iframe+form便签:
iframe提供一个通道(不刷新),然后form表单提交数据到iframe
 1 # -*- coding utf-8 -*-
 2 # coding=utf-8
 3 
 4 """"""
 5 """
 6 
 7 """
 8 import tornado.ioloop
 9 import tornado.web
10 
11 # 用来存放上传文件的文件名
12 IMG_LIST = []
13 
14 class LoginHandler(tornado.web.RequestHandler):
15     def get(self, *args, **kwargs):
16         self.render('login.html')
17     def post(self, *args, **kwargs):
18         print(self.get_argument('k1'))
19         # 这里write写aaa的会传到login.html里的success里的data参数
20         self.write('aaaaaaa')
21 
22 
23 class IndexHandler(tornado.web.RequestHandler):
24     def get(self, *args, **kwargs):
25         self.render('index.html',img_list=IMG_LIST)
26 
27     def post(self, *args, **kwargs):
28         print(self.get_argument('user'))
29         # 只有获取checkbox多选框需要用get_arguments
30         # 后台获取checkbox都是获取到['on', 'on'],因此为了标识,应该在checkbox中设置value值来区分
31         print(self.get_arguments('favor'))
32         # 对于文件类型,get_argument获取的只是文件名,文件的内容没有拿到
33         # print(self.get_argument('tupian'))
34 
35 
36         # 下面这段代码是获取文件内容
37         # self.request里面封装了所有请求的内容(get_argument也是调用self.request)
38         file_metas = self.request.files['tupian']
39         print(file_metas) #[{'filename': '搜狗截图17年04月25日0005_2.png', 'body': b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03\x94\x00\x00\x02S\x08\x06\x00\x00\x00w\xacY\xf0\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\x04gA
40         # tornado只能通过迭代来取
41         for meta in file_metas:
42             # 获取文件名
43             file_name = meta['filename']
44             import os
45             # 导入os模块进行路径的拼接
46             with open(os.path.join('statics','img',file_name),'wb') as up:
47                 up.write(meta['body'])
48             IMG_LIST.append(file_name)
49         self.render('index.html',img_list=IMG_LIST)
50 
51 
52 settings = {
53 
54     'template_path': 'views',
55     'static_path':'statics',
56     'static_url_prefix':'/statics/',
57 }
58 
59 application = tornado.web.Application([
60     (r'/login',LoginHandler),
61     (r'/index',IndexHandler),
62 
63 ],**settings)
64 
65 if __name__=='__main__':
66     application.listen(8888)
67     tornado.ioloop.IOLoop.instance().start()
app.py
  •  利用form表单提交
 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <ul>
 9         {% for item in img_list %}
10         <li><img style="height: 150px;width: 150px" src="/statics/img/{{item}}" alt=""></li>
11         {% end %}
12     </ul>
13 
14     <!--如果有文件上传时,form应该指定 enctype="multipart/form-data"-->
15     <form action="/index" method="post" enctype="multipart/form-data">
16         <input type="text" name="user">
17         <h3>爱好</h3>
18         <input type="checkbox" name="favor" value="1">篮球;
19         <input type="checkbox" name="favor" value="2">篮球;
20         <input type="checkbox" name="favor" value="3">篮球;
21         <input type="file" name="tupian" >
22         <input type="submit" value="提交">
23     </form>
24 
25 </body>
26 </html>
index.html.back_form
  • 利用Ajax
    • 原生Ajax  
    • index.html.back_ajax
    • jquery ajax
index.html.back_jquery_ajax
  • 利用iframe+form
index.html.back_iframe

 

posted @ 2017-06-13 01:07  yangyongbo  阅读(85)  评论(0)    收藏  举报