zoukankan      html  css  js  c++  java
  • 音频下载服务

    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

  • 相关阅读:
    Codeforces Round #383 D
    [HNOI2010]弹飞绵羊
    多项式幂函数(加强版)
    「ZJOI2015」地震后的幻想乡
    [AHOI2013]作业
    MVC3+EF4.1学习系列(九)-----EF4.1其他的一些技巧的使用
    MVC3+EF4.1学习系列(八)-----利用Repository and Unit of Work重构项目
    MVC3+EF4.1学习系列(七)-----EF并发的处理
    MVC3+EF4.1学习系列(六)-----导航属性数据更新的处理
    MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
  • 原文地址:https://www.cnblogs.com/lianzhilei/p/8626293.html
Copyright © 2011-2022 走看看