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

Flask文件上传遇Bad Request 400及500错误,求解决方法

问题分析与解决

核心错误点

  • 请求参数不匹配:测试脚本中上传文件的键是"log.txt",但服务器端期望的键是"file",导致无法获取上传文件
  • 文件名判断逻辑错误:isFileAllowed函数直接传入文件对象而非文件名,无法正确判断后缀
  • secure_filename参数错误:传入了文件对象而非文件名字符串,触发类型错误
  • 潜在问题:未确保上传目录存在,可能导致文件保存失败

修正后的服务器代码

import flask, os, werkzeug.utils

UPLOAD_FOLDER = "files/"
ALLOWED_EXTENSIONS = {"txt"}

# 确保上传目录存在,避免保存文件时出错
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

def isFileAllowed(filename):
    # 接收文件名,判断后缀是否合法
    return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS

app = flask.Flask(__name__)
app.config["UPLOAD_DIR"] = UPLOAD_FOLDER

@app.route("/log_receiver", methods = ["POST", "GET"])
def log_receiver():
    if flask.request.method == "POST":
        # 获取上传的文件对象,键名和测试脚本保持一致
        file = flask.request.files.get("file")
        if file and file.filename and isFileAllowed(file.filename):
            # 传入文件名给secure_filename处理
            filename = werkzeug.utils.secure_filename(file.filename)
            file.save(os.path.join(app.config["UPLOAD_DIR"], filename))
            return "Successfully uploaded"
        return "File couldn't be uploaded"            
    # GET请求返回合理提示,避免返回易误解的404
    return "Use POST method to upload files"

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

修正后的测试脚本代码

import requests

def log_uploader():
    with open("log.txt", "rb") as log:
        # 上传文件的键名改为"file",和服务器端对应;元组格式指定原始文件名
        r = requests.post("http://localhost:5000/log_receiver", files={"file": ("log.txt", log)})
        print(r.text)

if __name__ == '__main__':
    log_uploader()

关键修正说明

  1. 参数键名统一:服务器用request.files["file"]获取文件,测试脚本的files字典键名必须对应为"file",同时通过元组指定原始文件名,确保服务器能正确获取文件名
  2. 修复后缀判断函数:isFileAllowed改为接收文件名字符串,而非文件对象,正确提取后缀进行合法性校验
  3. 修正secure_filename参数:传入file.filename(文件对象的文件名属性)而非文件对象本身,符合函数参数要求
  4. 创建上传目录:添加os.makedirs(UPLOAD_FOLDER, exist_ok=True),提前确保目录存在,避免保存文件时抛出异常
  5. 优化GET请求返回:将GET请求的返回从"404, not found"改为明确提示,避免误解路由不存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:55:33