【发布时间】:2021-03-31 15:59:44
【问题描述】:
我的flask应用有一个功能,可以将目录中的日志文件压缩成一个zip文件,然后发送给用户下载。压缩工作,除了当客户端收到 zipfile 时,zip 包含一系列文件夹,这些文件夹与在服务器中压缩的原始文件的绝对路径相匹配。但是,在服务器静态文件夹中制作的 zipfile 没有。
静态文件夹中的压缩文件内容:“log1.bin, log2.bin”
发送给用户的压缩文件内容:“/home/user/server/data/log1.bin, /home/user/server/data/log2.bin”
我不明白为什么使用“send_file”似乎会更改 zip 文件的内容并用子文件夹填充收到的 zip 文件。收到的 zip 文件的实际内容在数据方面确实与发送的 zip 文件的内容相匹配,但用户必须单击多个目录才能找到这些文件。我做错了什么?
@app.route("/download")
def download():
os.chdir(data_dir)
if(os.path.isfile("logs.zip")):
os.remove("logs.zip")
log_dir = os.listdir('.')
log_zip = zipfile.ZipFile('logs.zip', 'w')
for log in log_dir:
log_zip.write(log)
log_zip.close()
return send_file("logs.zip", as_attachment=True)
【问题讨论】:
-
签出文档,他们有一些选项可以直接从服务器/静态文件夹flask.palletsprojects.com/en/1.1.x/api/#flask.send_file发送文件
-
感谢您送我到这里。我遇到了 send_from_directory 调用并修复了所有问题!
标签: python flask server download