WSGI GET请求返回文件
我刚接触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 这个头信息来给客户端提供文件名。