微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flask - 发送 zipfile 包含绝对路径

如何解决Flask - 发送 zipfile 包含绝对路径

我的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)

解决方法

使用 send_from_directory(directory,"logs.zip",as_attachment=True) 修复了所有问题。看来这个调用更适合提供静态文件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。