正在下载目录中下载文件 - flask,python

Downloading a file in downloads directory - flask, python

我有一个 Flask 应用程序,其中有一个按钮可以下载 HTML 报告。点击时的下载按钮会创建一个 xlsx 文件。它工作正常,直到该应用程序在我的本地服务器上 运行 因为 python 代码找到了我的 Downloads 目录,无论 os 它使用什么 python os 模块。

现在应用部署在远程服务器上,这种情况下,如何让系统知道客户端的下载目录路径,然后创建这个xlsx文件?或者如果我遗漏了一些更好的解决方案的任何其他指示?

要为用户提供下载文件,网络服务器需要以特殊方式传送文件。您不能使用 os 模块写入用户的计算机。它在本地工作,因为您的服务器与浏览器中的用户环境是同一台计算机。

为用户提供下载文件的正确方法是使用 flask 的 send_file 方法。

为了向您展示该过程,我在下面创建了一个示例。在此示例中,我假设您有一个名为 build_report(...) 的函数,它接受一个 report_id 和 returns 一个包含 xlsx 文件内容的 io.BytesIO 对象。

from flask import send_file

@app.route("/download-report/<report_id>")
def download_report(report_id):
    file_obj = build_report(report_id)
    return send_file(
        file_obj,
        mimetype="application/vnd.ms-excel",
        attachment_filename=f"report-{report_id}.xlsx",
    )

如果我理解正确 - 你想指定一个目录,当 he/she 点击下载按钮时,文件应该下载到用户计算机上。

这是不可能的,完全由浏览器处理。

浏览器处理特殊类型的request/stream,然后在用户在浏览器设置中指定的位置创建输出文件。您提到的 os 库与您的服务器计算机而非客户端相关,因此您在代码中提供的任何 os 操作都将在您的服务器上执行(如创建文件)。这就是它在您的本地机器上工作的原因——它同时是服务器和客户端。

为什么它被拒绝了?

想象一个“病毒文件”被上传到您的 C:\Windows\System32。通过简单的按钮下载,Web 应用程序可以被授予对您的机器的控制权。巨大的安全问题不允许从 Web 应用程序访问客户端机器