Python開發【Tornado】:搭建文件下載服務、音頻文件播放


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


免責聲明!

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



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