You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask POST方法失效报405错误,PDF上传功能异常求助

Flask PDF上传出现"Method Not Allowed"错误的解决办法

核心问题分析

你遇到的错误根源是表单提交的目标路径与后端处理POST请求的路由不匹配:

  • 表单的action="/",意味着提交请求到网站根路径/
  • 但你的上传逻辑写在/index路由下,且根路径没有配置支持POST方法的处理函数,所以Flask返回"Method Not Allowed"

分步解决步骤

1. 修正表单提交路径

把表单的action属性改为对应路由的路径。如果蓝图注册时没有添加前缀,直接修改为/index:

<form method="POST" action="/index" enctype="multipart/form-data">
    <input type="file" class="form-control" id="customFile" name="file"/>
    <input type="submit">
</form>

如果蓝图注册时加了前缀(比如app.register_blueprint(blueprint, url_prefix='/home')),则action需要改为/home/index。

2. 修复路由中的未定义变量

你的routes.py里直接使用了app.config,但没有导入Flask实例app,可以通过current_app获取当前应用实例(需要先导入):

from flask import current_app
# ...
if file and allowed_file(file.filename):
    filename = secure_filename(file.filename)
    file.save(os.path.join(current_app.config['UPLOAD_FOLDER'], filename))
    # ...

3. 补充缺失的upload_file路由

代码中提交成功后重定向到url_for('upload_file', name=filename),但未定义该路由,需要添加:

@blueprint.route('/upload_file/<name>')
def upload_file(name):
    # 返回上传成功提示,或根据需求返回文件
    return f"文件 {name} 上传成功!"
    # 如果需要返回文件,可使用:
    # return send_file(os.path.join(current_app.config['UPLOAD_FOLDER'], name))

4. 配置有效的上传目录

__init__.py里的UPLOAD_FOLDER为空字符串,建议设置为具体目录并确保目录存在:

import os

def create_app(config):
    # 设置项目根目录下的uploads文件夹为上传目录
    UPLOAD_FOLDER = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'uploads')
    # 自动创建目录(如果不存在)
    os.makedirs(UPLOAD_FOLDER, exist_ok=True)
    app = Flask(__name__)
    app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
    app.config.from_object(config)
    # 确保蓝图已注册
    from apps.home.routes import blueprint as home_blueprint
    app.register_blueprint(home_blueprint)
    # 启用flash消息需要设置SECRET_KEY
    app.config['SECRET_KEY'] = 'your-custom-secret-key'
    return app

额外检查项

  • 确认蓝图已正确注册到Flask应用中(上述create_app代码已包含注册逻辑)
  • 确保ALLOWED_EXTENSIONS只允许PDF文件的逻辑正常运行

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:55:22