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.運行效果圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM