上传文件这块可以分为两大类,第一类是通过form表单验证进行上传,还有一类就是通过ajax上传。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <h3>form文件上传</h3> 9 <form action="/index" method="post" enctype="multipart/form-data"> 10 <p>请选择上传文件:</p> 11 <input type="file" name="update_file"/> 12 <input type="submit" value="上传"/> 13 </form> 14 15 </body> 16 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <h3>文件上传,xml方式提交</h3> 9 <input type="file" id="img"/> 10 <input type="button" onclick="UpdateFile();" value="上传"> 11 12 <script> 13 function UpdateFile() { 14 //获取文件对象 15 var fileObj = document.getElementById(‘img‘).files[0]; 16 //创建Form对象 17 var forms = new FormData(); 18 forms.append("update_file", fileObj); 19 var xhr = new XMLHttpRequest(); 20 xhr.open("post", ‘/index2‘, true); 21 xhr.send(forms); 22 } 23 </script> 24 25 26 </body> 27 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <script src="/static/jquery-1.7.1.min.js"></script> 7 </head> 8 <body> 9 <h3>文件上传,ajax方式提交</h3> 10 <input type="file" id="img"/> 11 <input type="button" onclick="UpdateFile();" value="上传"> 12 13 <script> 14 function UpdateFile() { 15 //获取文件对象 16 var fileObj = document.getElementById(‘img‘).files[0]; 17 //创建Form对象 18 var forms = new FormData(); 19 forms.append("update_file", fileObj); 20 21 $.ajax({ 22 type: ‘POST‘, 23 url: ‘/index3‘, 24 data: forms, 25 processData: false, 26 contentType: false, 27 success: function (arg) { 28 console.log(arg); 29 } 30 }) 31 } 32 </script> 33 34 35 </body> 36 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <script src="/static/jquery-1.7.1.min.js"></script> 7 <style> 8 .hide{ 9 display: none; 10 } 11 </style> 12 </head> 13 <body> 14 <h3>文件上传,iframe方式</h3> 15 <form id="my_form" name="form" action="/index4" method="POST" enctype="multipart/form-data"> 16 <div> 17 <input name="update_file" id="my_file" type="file"/> 18 <input type="button" name="action" value="Update" onclick="redirect();"/> 19 <iframe id="my_iframe" name="my_iframe" src="" class="hide"></iframe> 20 </div> 21 </form> 22 23 <script> 24 function redirect() { 25 document.getElementById(‘my_iframe‘).onload= Testt; 26 document.getElementById(‘my_form‘).target = ‘my_iframe‘; 27 document.getElementById(‘my_form‘).submit(); 28 } 29 30 function Testt(ths) { 31 var t = $("#my_iframe").contents().find("body").text(); 32 console.log(t); 33 } 34 </script> 35 </body> 36 </html>
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 import tornado.ioloop 4 import tornado.web 5 6 7 class IndexHandler(tornado.web.RequestHandler): 8 def get(self): 9 self.render(‘index.html‘) 10 11 def post(self, *args, **kwargs): 12 file_metas = self.request.files["update_file"] #获取文件信息 13 for meta in file_metas: 14 file_name = meta[‘filename‘] #获取它的文件名 15 import os 16 with open(os.path.join("static", "img", file_name), ‘wb‘) as up: #打开本地一个文件 17 up.write(meta[‘body‘]) #body就是文件内容,把它写到本地 18 19 class Index2Handler(tornado.web.RequestHandler): 20 def get(self): 21 self.render(‘index2.html‘) 22 23 def post(self, *args, **kwargs): 24 file_metas = self.request.files["update_file"] #获取文件信息 25 for meta in file_metas: 26 file_name = meta[‘filename‘] #获取它的文件名 27 import os 28 with open(os.path.join("static", "img", file_name), ‘wb‘) as up: #打开本地一个文件 29 up.write(meta[‘body‘]) #body就是文件内容,把它写到本地 30 31 class Index3Handler(tornado.web.RequestHandler): 32 def get(self): 33 self.render(‘index3.html‘) 34 35 def post(self, *args, **kwargs): 36 file_metas = self.request.files["update_file"] #获取文件信息 37 for meta in file_metas: 38 file_name = meta[‘filename‘] #获取它的文件名 39 import os 40 with open(os.path.join("static", "img", file_name), ‘wb‘) as up: #打开本地一个文件 41 up.write(meta[‘body‘]) #body就是文件内容,把它写到本地 42 43 class Index4Handler(tornado.web.RequestHandler): 44 def get(self): 45 self.render(‘index4.html‘) 46 47 def post(self, *args, **kwargs): 48 file_metas = self.request.files["update_file"] #获取文件信息 49 for meta in file_metas: 50 file_name = meta[‘filename‘] #获取它的文件名 51 import os 52 with open(os.path.join("static", "img", file_name), ‘wb‘) as up: #打开本地一个文件 53 up.write(meta[‘body‘]) #body就是文件内容,把它写到本地 54 55 56 57 settings = { 58 ‘template_path‘: ‘views‘, #视图模板路径 59 ‘static_path‘: ‘static‘, #静态文件路径 60 } 61 #路由映射,路由系统 62 def make_app(): 63 return tornado.web.Application([ 64 (r"/index", IndexHandler), 65 (r"/index2", Index2Handler), 66 (r"/index3", Index3Handler), 67 (r"/index4", Index4Handler), 68 ], **settings) 69 70 if __name__ == "__main__": 71 app = make_app() 72 app.listen(8888) 73 tornado.ioloop.IOLoop.current().start()
原文:https://www.cnblogs.com/june-L/p/12081696.html