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

Flask无法接收文件与表单数据问题求助

问题原因与解决方案

核心问题出在手动设置multipart/form-data请求头:当使用FormData发送请求时,浏览器会自动生成包含boundary(分隔符)的Content-Type头,比如multipart/form-data; boundary=----WebKitFormBoundaryXxXxX。手动设置不带boundary的头会导致Flask无法正确解析表单数据,所以request.form为空,访问request.form['text_unput']会触发400错误。

修复步骤

1. 修正JavaScript代码

移除手动设置的Content-Type头,让浏览器自动处理:

var formData = new FormData();
formData.append("file", file);
// 如果data是JSON对象,先转成字符串再传入
formData.append("text_unput", typeof data === 'object' ? JSON.stringify(data) : data);
const xhr = new XMLHttpRequest();
xhr.open("POST", "https://route/to/server/paid");
// 移除这一行:xhr.setRequestHeader('Content-Type', 'multipart/form-data');
xhr.send(formData);

2. 修正Flask代码

使用request.form.get()安全获取文本字段(避免KeyError),用request.files.get()获取上传的文件;如果text_unput是JSON字符串,需先解析为对象:

import json
from flask import Flask, request

@app.route("/paid", methods=["POST"])
def paid():
    # 安全获取文本字段,不存在时返回None
    text_input = request.form.get('text_unput')
    if not text_input:
        return "缺少text_unput字段", 400
    
    # 解析JSON格式的文本字段
    try:
        text_data = json.loads(text_input)
    except json.JSONDecodeError:
        return "text_unput不是有效JSON格式", 400
    
    # 获取上传文件并处理
    uploaded_file = request.files.get('file')
    if uploaded_file:
        # 示例:保存文件到服务器
        uploaded_file.save(f"./uploads/{uploaded_file.filename}")
    
    # 返回处理结果
    return json.dumps({"status": "success", "received_data": text_data}), 200

补充说明

  • 若前端传入的data是JSON对象,必须用JSON.stringify(data)转成字符串后再append到FormData,否则后端会拿到[object Object]这类无效值。
  • Flask已封装request.form(普通表单字段)和request.files(文件字段)专门解析multipart/form-data请求,无需直接处理request.data原始字节流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:32:41