tornado框架图片上传和展示

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.运行效果图

posted @ 2020-05-10 15:40  不会飞的鲨鱼  阅读(935)  评论(0编辑  收藏  举报