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

Flask结合HTML表单实现文件上传时POST方法失效问题求助

问题分析与解决方案

核心问题

你的/upload路由未生效的直接原因是Python代码中的缩进错误:def upload():语句缩进了,导致Flask无法正确注册该路由。当表单提交时,因为找不到匹配的/upload路由,请求被默认处理,最终回到/路由并以GET方式携带file参数。

修复步骤及完整代码

1. 修复路由函数缩进

将def upload():与上方的@app.route('/upload', methods=['POST', 'GET'])左对齐,确保Flask能识别该路由。

2. 修正文件路径问题

Windows系统路径中的反斜杠需要转义,或使用原始字符串,避免转义字符解析错误。同时使用os.path.join拼接路径,保证跨平台兼容性。

3. 增加文件名安全处理

使用secure_filename处理上传的文件名,避免路径遍历等安全问题。

4. 确保上传目录存在

添加代码自动创建上传目录,防止因目录不存在导致文件保存失败。

修复后的Python代码

from flask import Flask, render_template, request
import os
from werkzeug.utils import secure_filename

app = Flask(__name__)

# 使用原始字符串处理Windows路径,避免转义错误
UPLOAD_FOLDER = r'C:\Users\caiop\Downloads\test'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# 确保上传目录存在
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

@app.route('/')
def index():
    return render_template('index.html')

# 修复缩进:def upload与@app.route左对齐
@app.route('/upload', methods=['POST', 'GET'])
def upload():
    if request.method == 'POST':
        if 'file' not in request.files:
            return "test001"
        
        file = request.files['file']
        
        if file.filename == '':
            return "test000"
        
        if file:
            # 使用secure_filename处理文件名,并用os.path.join拼接路径
            filename = secure_filename(file.filename)
            file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
            file.save(file_path)
            return "OK"

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

HTML代码(无需修改,确认表单属性正确)

<form action="/upload" method="post" enctype="multipart/form-data" class="inner-form" id="upload">
  <input id="filer" type="file" name="file">
  <input id="typer" type="submit" value="Upload">
</form>

验证效果

启动Flask应用后,选择文件点击上传,页面会跳转到127.0.0.1:5000/upload并显示"OK",文件将被保存到指定的test目录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:36:58