web.py大文件下载
需要下载大文件的时候,如果先将文件直接读入内容再返回,那肯定就很浪费内存,甚至会崩溃。
所以我们需要读一些内容然后直接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!
完鸟!
![](http://pic002.cnblogs.com/img/QLeelulu/200908/2009080113232717.jpg)
作者:QLeelulu
出处:http://QLeelulu.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
![Follow QLeelulu on Twitter](http://twitter-badges.s3.amazonaws.com/follow_me-a.png)
出处:http://QLeelulu.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利