python tornado 图片base64、流的 两种方式上传到前端界面。

写这篇文章是因为涉及到大量的图片上传,两种不通的方式和其效果,代码如下:

base64上传前端显示图片

代码结构如下:
在这里插入图片描述
只是简单的测试莫嫌弃代码low。
前端界面代码base64.html 的展示

<!DOCTYPE html>
<html>
<head><title>index</title></head>
<body>
{% for each_img in total_img%}
<img src="https://img-blog.csdnimg.cn/2022010615445631668.jpg">
{% end %}
</body>
</html>

后端逻辑代码work.py的展示

import os
import base64
import tornado.web
import tornado.ioloop
from tornado.web import RequestHandler
from tornado.options import define, options, parse_command_line

define('port', default=9951, type=int, )


def base64_img():
    """
    获取所有的文件的base64,以列表的形式返回
    :return:
    """
    img_base64 = []
    source_path = r'D:\dir'
    img_name_list = os.listdir(source_path)
    for each_img in img_name_list:
        each_img_name = os.path.join(source_path, each_img)
        with open(each_img_name, 'rb') as f:
            base64_data = base64.b64encode(f.read())
            img_base64.append(base64_data)
    return img_base64


class Base64Handler(RequestHandler):
    def get(self):
        total_img = base64_img()
        self.render("base64.html", total_img=total_img)


if __name__ == '__main__':
    parse_command_line()
    app = tornado.web.Application(
        [(r"/base64", Base64Handler), ],
        debug=True,
        default_host="0.0.0.0",
        template_path=os.path.join(os.path.dirname(__file__), "templates")
    )
    app.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

很简单的上传方式,但是在实际开发中,大量的图片是不可采取这类方法的,因为前端源码中占的资源太多了,毕竟base64的方式,看源码如下:
在这里插入图片描述
这还仅仅是一张图片的路径,可想而知在实际开发中,加载就费不少时间。不可采取。

流的方式上传图片

前端界面代码show.html 的展示

<!DOCTYPE html>
<html>
<head><title>index</title></head>
<body>
{% for each_img in total_img%}
<img src="./pic?id={{ each_img }}">
{% end %}
</body>
</html>

后端逻辑代码work.py的展示

import os
import base64
import tornado.web
import tornado.ioloop
from tornado.web import RequestHandler
from tornado.options import define, options, parse_command_line

define('port', default=9951, type=int, )


def img_list():
    """
    获取所有的文件名,以列表的形式返回。
    :return:
    """
    source_path = r'D:\dir'
    img_name_list = os.listdir(source_path)
    return img_name_list


class PictureHandler(RequestHandler):
    def get(self):
        source_path = r'D:\dir'
        id = self.get_argument('id')
        if id.endswith('.jpg'):
            pic = open(source_path + r'\\' + id, 'rb')
            pics = pic.read()
            self.write(pics)
            self.set_header("Content-type", "image/png")


class GetPictureHandler(RequestHandler):
    def get(self):
        total_img = img_list()
        self.render("show.html", total_img=total_img)


if __name__ == '__main__':
    parse_command_line()
    app = tornado.web.Application(
        [
            (r"/pic", PictureHandler),
            (r"/getPic", GetPictureHandler),
        ],
        debug=True,
        default_host="0.0.0.0",
        template_path=os.path.join(os.path.dirname(__file__), "templates")
    )
    app.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

以流的方式上传还是很快的毕竟前端源码只加载了路径而已,看源码如下图:
在这里插入图片描述
两种方法的效果展示
在这里插入图片描述
以上只是简单的使用介绍,实际开发中代码可能复杂的多,以上仅仅是提供思路而已。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python Tornado是一个用于构建高性能Web应用的异步框架。它基于事件循环和非阻塞IO的特性,可以处理大量并发连接,适用于实时应用程序和长轮询服务。在使用Tornado框架时,可以通过导入tornado.ioloop和tornado.web模块来创建应用程序。引用中的代码展示了一个简单的Tornado应用程序的快速入门示例。该示例创建了一个名为MainHandler的处理程序,当访问路径为/index时,会返回"Hello, world"。应用程序监听在8888端口上,并通过tornado.ioloop.IOLoop.instance().start()方法来启动运行。 除了快速入门示例,还可以通过引用中提供的链接来学习更多关于Python Tornado的项目实践。引用中的代码展示了一个更复杂的Tornado应用程序示例。该示例使用了自定义的模板路径和渲染页面的方式,将请求路由到MainHandler处理程序,并在访问路径为/index时渲染home/index.html页面。应用程序监听在80端口上,并通过tornado.ioloop.IOLoop.instance().start()方法来启动运行。 总而言之,Python Tornado是一个强大的异步框架,可以用于构建高性能的Web应用。通过学习快速入门示例和项目实践,可以更好地理解和使用Tornado框架。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Pythontornado](https://blog.csdn.net/banzhi8397/article/details/101392895)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python tornado](https://download.csdn.net/download/yun12315000/10510234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python开发之Tornado](https://blog.csdn.net/Dr_BigJoe/article/details/105206923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值