我是 Tornado Web 框架的新手。谁能告诉我如何使用 Tornado 框架通过网络浏览器下载文件。
			
			8830 次
		
1 回答
            15        
        
		
Tornado 带有同步和异步 HTTP 客户端。您可以在此处找到文档。
这是从上面链接的页面中获取的同步示例:
from tornado import httpclient
http_client = httpclient.HTTPClient()
try:
    response = http_client.fetch(url)
    print(response.body)
except httpclient.HTTPError as e:
    print("Error:", e)
http_client.close()
如果要将结果输出保存到磁盘,则不要打印数据,而是将其写入文件。请注意,即使在 Python 3 中,Tornado 也会将响应主体作为字符串返回:
with open(output_file_name) as f:
    f.write(response.body)
当然,如果响应数据非常大,您将需要分块下载文件并即时写入磁盘(参见此处)。
最后,如果由于某种原因您不受 Tornado 的限制,我强烈推荐该requests库(或grequests用于异步调用)。
编辑:要将静态文件作为下载提供,请在您的处理程序中执行以下操作get:
def get(self):
    file_name = 'file.ext'
    buf_size = 4096
    self.set_header('Content-Type', 'application/octet-stream')
    self.set_header('Content-Disposition', 'attachment; filename=' + file_name)
    with open(file_name, 'r') as f:
        while True:
            data = f.read(buf_size)
            if not data:
                break
            self.write(data)
    self.finish()
在 Python 3 中你可能有也可能没有字节/字符串问题。
于 2013-08-20T08:18:21.423   回答