如何使用werkzeug流式传输文件?

9

我想通过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个回答

21

虽然我自己没有尝试过,但我认为以下内容会起作用。

g = file(path_to_bigfile) # or any generator
return Response(g, direct_passthrough=True)

0

如果您还想要: 1. 保留文件名 2. 在不重定向页面的情况下下载

# 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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接