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

通过XHR向Flask服务器上传文件时后端接收不到表单数据问题求助

文件上传失败问题修复方案
  • 核心问题出在JS代码里手动设置了错误的multipart/form-data请求头
    当你使用XMLHttpRequest发送FormData类型的请求体时,浏览器会自动为请求添加Content-Type: multipart/form-data头,同时自动生成用于分隔表单字段的boundary参数。你手动指定该头的操作会覆盖浏览器的默认行为,导致请求头丢失boundary参数,Flask无法正确解析表单内容,也就读不到任何表单和文件数据。
    修复方法:直接删除JS代码中xhr.setRequestHeader("Content-Type", "multipart/form-data")这一行即可。

  • 可选优化:简化FormData构造逻辑
    你不需要额外创建DOM节点form来包裹文件输入框,可以直接构造FormData对象添加文件,逻辑更清晰:

    function submitInput(input) {
        const formData = new FormData()
        // 兼容多文件上传
        for (let i = 0; i < input.files.length; i++) {
            formData.append('file', input.files[i])
        }
    
        const xhr = new XMLHttpRequest()
        xhr.open("POST", "/upload")
    
        xhr.upload.addEventListener("progress", (e) => {
            const percent = e.lengthComputable ? (e.loaded / e.total) * 100 : 0
            console.log(percent.toFixed(2))
        })
    
        xhr.send(formData)
    }
    

修改后重新测试即可正常上传,Flask侧可以通过request.files.getlist('file')获取到所有上传的文件,请求大小也会和实际上传的文件大小匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:21:02