Python开发【Tornado】:搭建文件下载服务

2018-06-18 02:02:09来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Python 全栈开发:python字符编码

下一篇:python全栈开发-Day7 文件处理