You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flask环境下文件无法下载问题求助

解决Flask文件下载无反应的问题

我来帮你分析下为啥点击按钮没反应,主要有几个关键点没处理对,咱们一步步来修正:

问题根源

  1. HTML表单没指定请求目标:你写的<form>标签没有action属性,点击提交按钮时,请求会发送到当前页面的URL,根本没触发Flask里的/return-files路由,所以你的下载逻辑完全没执行。
  2. 文件路径可能有误send_from_directory里的directory='Users/Desktop/Python/'是相对路径,Flask可能找不到这个目录;而且如果是Mac系统,绝对路径应该以/开头(比如/Users/你的用户名/Desktop/Python/)。
  3. 没触发下载弹窗:默认情况下send_from_directory可能会直接在浏览器显示文本内容,不会弹出下载框。

修正后的代码

HTML部分(给表单加上action)

<form method="GET" action="/return-files">
  <input type="submit" value="下载myFile.txt">
</form>

这里的action="/return-files"明确告诉浏览器,点击提交时要请求Flask的这个路由。

Flask部分(修正路径+添加下载触发参数)

from flask import Flask, send_from_directory
import os

app = Flask(__name__)

@app.route('/return-files', methods=['GET'])
def return_file():
    # 替换成你自己的实际文件目录,比如你的Mac用户名是"tom",就写成'/Users/tom/Desktop/Python/'
    file_directory = '/Users/你的用户名/Desktop/Python/'
    # 如果你把txt文件放到Flask项目的static文件夹里,更推荐用这种相对路径写法(更安全)
    # file_directory = os.path.join(app.root_path, 'static')
    
    # 确保文件名拼写正确,注意大小写!
    filename = 'myFile.txt'
    
    # as_attachment=True 强制浏览器触发下载弹窗,而不是直接打开文件
    return send_from_directory(
        directory=file_directory,
        filename=filename,
        as_attachment=True
    )

if __name__ == '__main__':
    app.run(debug=True)

额外注意事项

  • 一定要确认文件路径和文件名完全正确,Mac/Linux系统区分大小写,别写错字母大小写。
  • 确保Flask进程有权限读取这个txt文件,如果是系统目录,可能需要调整权限或者把文件移到项目目录下(比如static文件夹)。
  • 生产环境部署时记得关掉debug=True,避免安全风险。

内容的提问来源于stack exchange,提问作者SineCo

火山引擎 最新活动