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

Flask中request.files返回空ImmutableMultiDict([])的问题排查

Flask AJAX上传文件时request.files为空的问题解决

你的代码里有几个关键错误导致Flask无法解析上传的文件,以下是修正方案:

1. FormData添加文件的方式错误

你当前是把整个file input元素添加到FormData里,而不是选中的文件对象。需要修改为获取input的files[0]属性:

// 原代码
// form_data.append("file", $("#edit_form #image_field")[0]);
// 修正后
form_data.append("file", $("#edit_form #image_field")[0].files[0]);

2. jQuery AJAX的参数配置错误

jQuery处理FormData上传时,必须禁用默认的数据处理和内容类型设置:

  • processData: false:阻止jQuery把FormData转换成字符串,破坏文件上传格式
  • contentType: false:让浏览器自动生成正确的multipart/form-data请求头(包含必要的boundary),手动设置multipart/form-data会丢失boundary,导致Flask无法解析

修正后的AJAX代码:

$.ajax({
    type: 'POST',
    url: '/api/add_product_image',
    data: form_data,
    contentType: false,
    processData: false,
    success: function(data) {
        console.log('Success!');
        // put up image in preview
    },
});

3. Python代码的健壮性优化

建议增加文件存在判断,避免空文件报错,同时用更安全的路径拼接方式:

import os

@app.route('/api/add_product_image', methods=['POST'])
def add_product_image():
    print(request.form)
    try:
        id = request.form["id"]
        print(request.files)
        file = request.files.get("file")
        # 检查文件是否存在且有文件名
        if file and file.filename:
            # 使用os.path.join拼接路径,避免跨平台问题
            save_path = os.path.join("./static/imgs", f"{id}.png")
            file.save(save_path)
            return {"status": "success"}
        else:
            return {"status": "error", "message": "未选择有效文件"}
    except Exception as e:
        print(e)
        return {"status": "error", "message": str(e)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:35:26