WSGI GET请求返回文件

4 投票
1 回答
6016 浏览
提问于 2025-04-16 03:36

我刚接触Python中的WSGI,手头有一台装了isapi_wsgi的Windows服务器。我还有一个脚本,可以很好地处理我的GET请求。问题是,有人给我发请求,我需要把一个zip文件返回给他们。以下代码是在我的GET处理程序中的,它可以工作,但感觉不是返回zip文件的正确方法:

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

问题是,你返回的是一个“流”,这意味着你失去了文件名(浏览器只是把它命名为GET请求的名字),而且速度似乎也很慢。

有没有更好的方法可以用WSGI返回一个文件供下载,而不是这样的方法呢?

提前谢谢你!

1 个回答

12

直接摘自 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 这个头信息来给客户端提供文件名。

撰写回答