我正在开发一个服务器,该服务器从Flask
的服务器获取日志文件。
这是获取日志的方法的片段:
@app.route('/logs', methods=['POST'])
def logs():
if request.method == 'POST':
if request.headers['Content-Type'] == 'application/octet-stream':
return not_implemented()
if request.headers['Content-Type'] == 'application/gzip':
# @TODO: Implement me: I must return a gzip file
return not_implemented()
我想要的是创建一个流,所以当我使用param POST
向/logs
发出filename=foo.txt
请求时,我想返回一个流,所以我可以读取该文件在我的客户端。到目前为止,我试图编写以下方法:
def get_stream(filename):
"""Return the file as a stream of binaries
:return file: A file pointer for the binary file
"""
chunk_size = 4096
try:
if os.path.exists(filename):
with open(filename, "bw") as f:
while True:
chunk = f.read(chunk_size)
#@TODO: Add the remaining of the implementation
except Exception, ex:
log.error(ex)
return None
我不明白如何使用yield
将迭代器返回到get_stream()
方法。我知道我必须返回类似的内容:
return Response(get_stream("foo.txt"), mimetype="application/octet-stream")
有人可以帮我吗?