【问题标题】:Returning a file to a WSGI GET request将文件返回到 WSGI GET 请求
【发布时间】:2010-09-01 22:49:35
【问题描述】:

我是 python 上的 WSGI 新手;但是有一个安装了 isapi_wsgi 的 Windows 服务器。我还有一个脚本可以处理我的 GET 请求,并且运行良好。问题是,有人向我发送了一个请求,我需要将一个 zip 文件返回给请求者。以下代码在我的 GET 处理程序中,它可以工作,但似乎不是返回 zipfile 的正确方法:

  # open zip file return it
  fin = open(zOutFilename, "rb")
  start_response( "200 OK", [('Content-Type', 'application/zip')])
  return fin.read()

问题是,您正在返回一个“流” - 这意味着您丢失了文件名(浏览器只是将其命名为 GET 查询的名称)而且看起来非常慢。

有没有比这种方法更好的方法来使用wsgi返回文件以供下载?

提前致谢

【问题讨论】:

    标签: python forms download get wsgi


    【解决方案1】:

    直接取自PEP 333:

    if 'wsgi.file_wrapper' in environ:
        return environ['wsgi.file_wrapper'](filelike, block_size)
    else:
        return iter(lambda: filelike.read(block_size), '')
    

    您可能还需要Content-Disposition 标头来向客户端提供文件名。

    【讨论】:

    • 是的,是的——这就是我要找的。它解决了我的问题:

      fin = open(zOutFilename, "rb") size = os.path.getsize(zOutFilename) start_response("200 OK", [ ('Content-Type', 'application/zip'), ('Content-length', str(size)), ('Content-Disposition', 'attachment; filename='+finalModelName+'.zip') ] ) # 返回整个文件 if 'wsgi.file_wrapper' in environ: return environ['wsgi.file_wrapper'](fin, 1024) else: return iter(lambda: fin.read(1024), '')

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多