我是龙卷风的新手,我需要提供一个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()
这只是给了我一个白页,它没有开始下载。有没有人有更好的建议来实现我的目标?
答案 0 :(得分:2)
如果您想将zipfile动态发送到浏览器(不保存到本地文件系统),请尝试以下操作:
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对象是zipfile所在的位置,zipname只是发送到客户端浏览器的名称。
答案 1 :(得分:0)
我已经阅读了一下这就是我发现的:我为龙卷风构建了静态目录,我已经更改了python代码以将zip文件存储在静态文件夹中:
zipname="C:/whatever/static/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.write("""<a href="/static/clients_counter.zip"> Download Zip of client counter files</a>""")
except:
traceback.print_exc()
settings = {
"static_path" : os.path.join(os.path.dirname(__file__), "static")
} # This indicates the directory for static files to the server:
# it has to be a directory called static inside the project directory
比构建新目录或使用其他更困难的黑客攻击容易得多。如果这可以帮助任何人,我很高兴。