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
