音频下载服务

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

posted @ 2018-03-22 20:21  Assassinの  阅读(3866)  评论(7编辑  收藏  举报