1.后端代碼
import os import tornado.ioloop import tornado.web # web應用api from PIL import Image class FormsHandler(tornado.web.RequestHandler): def get(self): path = os.listdir('/home/pyvip/my_tornado/static/files/') # 傳入一個路徑,返回一個列表,里面是這個目錄下面的所有文件名 self.render('upload_file.html', path=path) def post(self): upload_path = '../static/files' # 配置文件上傳的路徑 file_metas = self.request.files.get('file', []) # 獲取文件對象 # [{'filename':'1.jpg', 'body': b'xxx'}, {'filename':'2.jpg', 'body': b'xxx'}] for meta in file_metas: # meta {'filename':'1.jpg', 'body': b'xxx'} file_name = meta.get('filename') file_path = os.path.join(upload_path, file_name) # 拼接路徑 with open(file_path, 'wb') as f: f.write(meta.get('body')) # 寫入內容 # 獲取圖片后綴名 image_type = file_name.split('.')[-1] # 縮略圖 im = Image.open(file_path) # 打開圖片 im.thumbnail((200, 200)) # 設置圖片大小 if image_type == 'jpg': aa = 'jpeg' elif image_type == 'png': aa = 'png' im.save(file_path, aa) return self.redirect('/f') def make_app(): return tornado.web.Application([ # tornado配置,靜態文件等 (r"/f", FormsHandler), # 配置路由 ], debug=True, static_path='../static', # 配置靜態文件路徑 template_path='../template', # 配置模板路徑 ) if __name__ == "__main__": # 只有在當前文件運行的時候才會執行 app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start() # 開啟tornado服務
2.前端代碼(新建template/upload_file.html文件)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上傳</title> <style> li{ list-style: none; float: left; margin-left: 10px; } </style> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="file"><br> <input type="file" name="file"><br> <button type="submit">上傳</button> </form> <br> <div> <ul> {% for i in path %} <li><img src="{{ static_url('files/{}'.format(i)) }}" alt=""></li> {% end %} </ul> </div> </body> </html>
3.創建static/files文件夾,用來保存上傳的圖片
4.運行效果圖