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

文件上传时API请求Payload显示[object File]如何解决

问题根因

请求里文件字段显示[object File]是因为FormData.append()的传值不符合要求:该方法只支持传入字符串、Blob、File类型的值,你直接把存储File对象的数组整体传入时,方法会自动对入参执行toString()转换,File对象转字符串的结果就是[object File],自然无法被后端识别为正常文件流。

现存的其他问题
  • 直接修改React state:SubmitAward方法里直接用push修改this.state.awarddata属于React官方不推荐的反模式,直接修改原state不会触发组件重渲染,还可能引发状态不一致问题,必须通过setState更新状态。
  • Token头格式错误:Authorization字段的Bearer格式要求令牌和前缀间有空格,你写的"Bearer" + UserToken拼接后没有空格,会导致后端鉴权失败。
  • 多值字段传参错误:不管是多文件还是多文本值,都不能直接把数组append到FormData的单个字段下,后端无法识别这种格式。
修正方案
  1. 修正奖项提交方法,不要直接修改state:
SubmitAward() {
  const awardValue = {
    title: this.state.awardTitle,
    award_img: this.state.document,
  };
  this.setState(prevState => ({
    awarddata: [...prevState.awarddata, awardValue]
  }));
}
  1. 修正接口请求逻辑,逐个追加FormData字段,修复请求头格式:
instructor_register() {
  const UserToken = localStorage.getItem("UserToken");
  const formdata = new FormData();
  formdata.append("first_name", this.state.firstname);

  // 遍历奖项数据,逐个追加名称和文件,同名字段多次append后后端会自动识别为数组
  this.state.awarddata.forEach((item) => {
    formdata.append("instructor_award_name", item.title);
    formdata.append("instructor_award_img", item.award_img);
  });

  axios({
    method: "post",
    url: `${API_AUTH_URL}instructor-register`,
    data: formdata,
    headers: { 
      Authorization: `Bearer ${UserToken}`
      // 不要手动设置Content-Type,让axios自动生成带boundary的multipart/form-data头
    },
  })
  .then((response) => {
    console.log("response.....", response.data);
  })
}

补充提示:手动给FormData请求设置Content-Type: multipart/form-data是常见错误,会丢失请求必须的边界标识(boundary),导致后端解析文件失败,直接让axios自动处理请求头即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:15:25