您的位置:首页 > 其它

web.py大文件下载

2011-08-05 14:10 225 查看
需要下载大文件的时候,如果先将文件直接读入内容再返回,那肯定就很浪费内存,甚至会崩溃。

所以我们需要读一些内容然后直接flush给客户端,但是web.py的文档里面却没有找到flush的方法。

不过在web.py的cookbook中的How to Stream Large Files中看到可以直接yield返回内容。所以,我们可以使用yield来做flush做的事情。

BUF_SIZE = 262144
class download:
def GET(self):
file_name = 'file_name'
file_path = os.path.join('file_path', file_name)
f = None
try:
f = open(file_path, "rb")
webpy.header('Content-Type','application/octet-stream')
webpy.header('Content-disposition', 'attachment; filename=%s.dat' % file_name)
while True:
c = f.read(BUF_SIZE)
if c:
yield c
else:
break
except Exception, e:
print e
yield 'Error'
finally:
if f:
f.close()


OK!

完鸟!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: