如何使用werkzeug流式传输文件?
我想通过 werkzeug 来传输一个大文件。
现在我的 wsgi 应用程序是这样的:
from werkzeug.wrappers import Request, Response
from werkzeug.wsgi import ClosingIterator, wrap_file
import os
class Streamer(object):
def __init__(self):
pass
def __call__(self, environ, start_response):
request = Request(environ)
filename = os.getcwd() + "/bigfile.xml"
try:
response = wrap_file(environ, open(filename) )
return response
except HTTPException, e:
response = e
return ClosingIterator(response(environ, start_response))
我不太确定应该如何处理 wrap_file 函数返回的对象。
2 个回答
0
如果你还想要做到以下几点:
- 保留文件名
- 在不跳转页面的情况下进行下载
# file_name assumed to be known
# file_path assumed to be known
file_size = os.path.getsize(file_path)
fh = file(file_path, 'rb')
return Response(fh,
mimetype='application/octet-stream',
headers=[
('Content-Length', str(file_size)),
('Content-Disposition', "attachment; filename=\"%s\"" % file_name),
],
direct_passthrough=True)
21
我自己还没试过,但我觉得下面的方法应该可以用。
g = file(path_to_bigfile) # or any generator
return Response(g, direct_passthrough=True)