【问题标题】:How do I stream a file using werkzeug?如何使用 werkzeug 流式传输文件?
【发布时间】:2011-03-02 10:29:18
【问题描述】:

我想通过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 函数返回的对象。

【问题讨论】:

    标签: python werkzeug


    【解决方案1】:

    我自己没试过,但我认为以下会起作用。

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

    【讨论】:

      【解决方案2】:

      以防万一有人还想: 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 2018-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多