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

调用文件上传POST接口时出现HTTP 400错误求助

文件上传接口400 Bad Request排查方案

问题背景

Java控制器定义的文件上传端点代码:

@RequestMapping(value = "/upload/file", method = { RequestMethod.POST})
public MyResponse<?> uploadFile(@RequestHeader(required = true) String country, @RequestHeader(required = true) String user, @RequestParam("file") MultipartFile file)
{
}

React端调用代码:

const response = await MyReactUtility.postMultipartFileContent(endpoint, result);

postMultipartFileContent(url, data) {
    let formData = new FormData();
    formData.append("file", data.files[0]);
    return axios.post(url, formData).catch(err => console.log("Axios multipart err: ", err));
},

Chrome Network面板显示Payload仅包含file: (binary),调用接口时返回400 Bad Request。


排查及解决方向

1. 缺少必填请求头

Java接口明确要求country和user两个必填请求头,但当前React请求未携带这两个字段,后端校验不通过直接返回400。

解决:修改React请求方法,添加请求头参数:

postMultipartFileContent(url, data, headers) {
    let formData = new FormData();
    formData.append("file", data.files[0]);
    // 携带必填请求头
    return axios.post(url, formData, { headers }).catch(err => console.log("Axios multipart err: ", err));
},

调用时传入包含country和user的headers对象:

const response = await MyReactUtility.postMultipartFileContent(endpoint, result, {
    country: "你的国家值",
    user: "当前用户标识"
});

2. 文件字段为空或字段名不匹配

检查data.files[0]是否有效:如果data.files是空数组,会导致FormData中file字段无内容,触发后端参数校验失败;另外要确保字段名和Java接口@RequestParam("file")完全一致。

解决:添加文件存在性校验:

postMultipartFileContent(url, data, headers) {
    let formData = new FormData();
    if (!data.files || data.files.length === 0) {
        throw new Error("请选择要上传的文件");
    }
    formData.append("file", data.files[0]);
    return axios.post(url, formData, { headers }).catch(err => console.log("Axios multipart err: ", err));
},

3. Axios请求头被篡改(可选排查)

虽然FormData会自动设置Content-Type为multipart/form-data,但如果项目中有请求拦截器篡改了请求头,可能导致后端无法解析Multipart请求。

解决:手动指定请求头(注意不要手动设置边界,让浏览器自动处理):

return axios.post(url, formData, {
    headers: {
        ...headers,
        'Content-Type': 'multipart/form-data'
    }
}).catch(err => console.log("Axios multipart err: ", err));

4. 后端Multipart配置缺失

如果后端未正确配置Multipart文件解析器,会导致无法处理文件上传请求,返回400。

解决:

  • 若为Spring Boot项目,确保已引入spring-boot-starter-web依赖(自动配置Multipart支持);
  • 若为传统Spring项目,需手动配置MultipartResolver Bean:
@Bean
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setMaxUploadSize(10485760); // 限制最大上传大小为10MB
    return resolver;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:11:05