Skip to main content
 首页 » 编程设计

python之在 tornado.web 中提供一个 zip 文件

2024年11月01日33daizhj

我是 tornado 的新手,我需要提供一个 zip 文件(由 python 制作)。

所以我将这些代码行添加到我的脚本中,找到了here :

        zipname="clients_counter.zip" 
        zf = zipfile.ZipFile(zipname, "w") 
        for dirname, subdirs, files in os.walk("tozip"): 
            zf.write(dirname) 
            for filename in files: 
                zf.write(os.path.join(dirname, filename)) 
        zf.close() 
        self.set_header('Content-Type', 'application/zip') 
        self.write(zipname.getvalue()) 
        self.finish() 

结果这只是给我一个白页,它没有开始下载。谁有更好的建议来实现我的目标?

请您参考如下方法:

如果你想将 zip 文件即时发送到浏览器(而不保存到本地文件系统),试试这个:

from io import BytesIO 
zipname="clients_counter.zip" 
f=BytesIO() 
zf = zipfile.ZipFile(f, "w") 
    for dirname, subdirs, files in os.walk("tozip"): 
        zf.write(dirname) 
        for filename in files: 
            zf.write(os.path.join(dirname, filename)) 
zf.close() 
self.set_header('Content-Type', 'application/zip') 
self.set_header("Content-Disposition", "attachment; filename=%s" % zipname) 
self.write(f.getvalue()) 
f.close() 
self.finish() 

BytesIO 对象是 zip 文件所在的位置,而 zipname 只是发送到客户端浏览器的名称。