远程服务器Flask应用文件通过浏览器链接下载方法咨询
简便实现Flask应用文件下载的方案
嘿,你不用折腾FTP啦,直接用Flask本身就能轻松搞定文件下载的需求——之前的HTTP链接无效,是因为Flask默认只会暴露static和templates目录下的内容,你的cleaned_files不在默认允许的路径里,所以直接访问找不到。下面给你两种最简便的方法:
方法一:单个文件下载路由(最常用)
直接在你的app.py里添加一个专门处理下载的路由,用Flask内置的send_from_directory函数就能搞定:
- 先导入必要的模块:
from flask import Flask, send_from_directory import os
- 添加下载路由:
app = Flask(__name__) # 处理文件下载的路由 @app.route('/download/<filename>') def download_file(filename): # 获取当前app.py所在的项目根目录 project_root = os.path.dirname(__file__) # 拼接cleaned_files的完整路径 file_directory = os.path.join(project_root, 'cleaned_files') # as_attachment=True 让浏览器触发下载动作,而不是直接打开文件 return send_from_directory(file_directory, filename, as_attachment=True) # 你的其他Flask路由和业务逻辑... if __name__ == '__main__': app.run(host='0.0.0.0', port=8991) # 注意host设为0.0.0.0才能让远程用户访问
配置完成后,启动Flask应用,用户就能通过这个链接下载文件了:http://linuxserver:8991/download/generated_file.xlsx
方法二:允许浏览整个文件目录(可选)
如果需要让用户能浏览cleaned_files里的所有文件并自主选择下载,可以扩展上面的路由,添加目录列表功能:
import os from flask import Flask, send_from_directory, render_template_string app = Flask(__name__) # 目录浏览+文件下载路由 @app.route('/files/') @app.route('/files/<filename>') def browse_files(filename=None): project_root = os.path.dirname(__file__) file_directory = os.path.join(project_root, 'cleaned_files') if filename is None: # 列出目录下的所有文件 files = os.listdir(file_directory) # 生成简单的HTML列表模板 html = """ <h1>可用下载文件</h1> <ul> {% for file in files %} <li><a href="/files/{{ file }}">{{ file }}</a></li> {% endfor %} </ul> """ return render_template_string(html, files=files) else: # 处理单个文件下载 return send_from_directory(file_directory, filename, as_attachment=True)
启动后用户访问http://linuxserver:8991/files/就能看到所有文件,点击对应链接即可下载。
注意事项
- 确保Flask运行的进程对
cleaned_files目录和里面的文件有读取权限,不然会返回403或500错误。 - 如果是生产环境部署Flask(比如用Gunicorn+Nginx),建议把静态文件下载交给Nginx处理,但开发阶段用上面的方法完全够用。
内容的提问来源于stack exchange,提问作者jKraut
相关产品推荐
相关产品推荐

