正在下载目录中下载文件 - 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 应用程序访问客户端机器
我有一个 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 应用程序访问客户端机器