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

使用express-fileupload+React上传文件时req.files为空、文件进入req.body问题

问题根因

你的前端代码存在3处错误,导致FormData无法正确传递文件对象,后端express-fileupload无法识别到上传的文件内容:

  • 存储文件对象时额外套了一层数组,FormData append时传入数组会被强制序列化为字符串,最终变成[object File]存入请求体
  • 提交函数未阻止浏览器默认表单提交行为,会导致页面刷新、异步请求异常
  • 手动指定multipart/form-data请求头时缺少边界(boundary)标识,后端无法正确分割解析请求体内容
前端修改方案
  1. 修正onChange里的文件状态赋值:
const onChange = e => {
  console.log(e.target.files[0].name)
  // 去掉数组包裹,直接存File对象
  setFile(e.target.files[0]);
  setFilename(e.target.files[0].name);
};
  1. onSubmit开头添加阻止默认事件逻辑,删除手动指定的请求头:
const onSubmit = async e => {
  // 新增:阻止浏览器默认表单提交
  e.preventDefault();
  const formData = new FormData(); 
  formData.append("file", file);

  if(!formData){
   console.log("empty");
  }

  try {
      // 删掉手动设置的Content-Type,浏览器会自动生成带正确边界标识的请求头
      const res = await axios.post('http://localhost:5001/up', formData);
      console.log("file read");
      console.log(res)
      const { fileName, filePath } = res.data;
  } catch (err) {
   console.log(err)
  }
};
后端优化方案

删除未使用的multer库引入,避免和express-fileupload产生潜在冲突:
删掉import multer from "multer"这行代码即可,其余逻辑无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 03:00:04