【问题标题】:Flask - Sending zipfile contains absolute pathFlask - 发送 zipfile 包含绝对路径
【发布时间】: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)

【问题讨论】:

标签: python flask server download


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多