lianzhilei

Tornado 如何做文件下载

要求:浏览器输入url地址,直接弹窗提示下载 

 

Tornado服务端,搭建文件下载服务

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):

    def get(self):
        filename = self.get_argument(\'filename\')
        # http头 浏览器自动识别为文件下载
        self.set_header(\'Content-Type\', \'application/octet-stream\')
        # 下载时显示的文件名称
        self.set_header(\'Content-Disposition\', \'attachment; filename=%s\'%filename)
        with open(filename, \'rb\') as f:
            while True:
                data = f.read(1024)
                if not data:
                    break
                self.write(data)
        # # 记得有finish哦
        self.finish()

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

浏览器验证 输入地址http://127.0.0.1:8888/?filename=meeting_welcome.wav:

 

补充:之前测试,一直在浏览器页面显示的是二进制字符串,后来发现是没有在http包里面指定头部类型

 

下载中文文件

Tornado服务端

#!/usr/bin/env python
# -*- coding:utf-8 -*-


import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):
    def get(self,*args):
        filename = self.get_argument(\'filename\')
        print(filename)
        self.set_header(\'Content-Type\', \'application/octet-stream\')
        self.set_header(\'Content-Disposition\', (\'attachment; filename=%s\'%filename).encode(\'utf-8\'))

        with open(filename, \'rb\') as f:
            while True:
                data = f.read(1024)
                if not data:
                    break
                self.write(data)


def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])


if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

浏览器验证 输入地址http://127.0.0.1:8888/?filename=会.wav

 

Tornado 音频文件在线播放

效果入下:

 代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os
import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):
    def get(self,filename):
        self.set_header(\'Content-Type\', \'audio/mpeg\')
        if os.path.exists(filename):
            with open(filename, \'rb\') as f:
                while True:
                    data = f.read(1024)
                    if not data:
                        break
                    self.write(data)
            # # 记得有finish哦
            self.finish()
        else:
            self.send_error(404)

def make_app():
    return tornado.web.Application([
        (r"/(.*)", MainHandler),
    ])


if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

请求地址http://127.0.0.1:8888/test.mp3

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-06-14
  • 2021-12-19
  • 2021-10-16
  • 2021-11-25
  • 2021-07-15
  • 2022-01-21
  • 2022-12-23
猜你喜欢
  • 2022-02-09
  • 2021-08-10
  • 2022-02-19
  • 2021-07-14
  • 2021-10-25
  • 2022-12-23
相关资源
相似解决方案