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

Node.js接收Excel文件转JSON时req.body为空问题求助

解决上传Excel时req.body为空的问题

兄弟,我太懂你作为Node.js新手遇到这个问题的崩溃了——明明选了Excel提交表单,服务器端的req.body却一直是空的!别慌,这问题其实是你没处理对multipart/form-data类型的请求,我给你一步步讲清楚怎么解决:

问题根源

咱们平时用的express自带的解析中间件(比如老版本的body-parser),只能处理application/x-www-form-urlencoded和application/json格式的请求,但文件上传用的是multipart/form-data,这种格式它根本解析不了,所以req.body自然是空的,连文件都接收不到。

解决方案:用multer处理文件上传

multer是专门用来处理multipart/form-data请求的中间件,能帮你解析出文件和普通表单字段,一步到位。

1. 安装必要的包

先在项目里装multer和解析Excel的xlsx库:

npm install multer xlsx

2. 配置服务器端代码

把你的express服务器改成这样,我给你写好注释了:

const express = require('express');
const multer = require('multer');
const xlsx = require('xlsx');
const app = express();

// 用内存存储文件(不用存到硬盘,直接读内容转JSON)
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

// 处理上传请求的路由:upload.single('file')对应前端input的name属性
app.post('/sendFile', upload.single('file'), (req, res) => {
  // 检查有没有上传文件
  if (!req.file) {
    return res.status(400).send('请选择要上传的Excel文件');
  }

  // 把Excel转成JSON
  const workbook = xlsx.read(req.file.buffer, { type: 'buffer' });
  const firstSheet = workbook.SheetNames[0];
  const worksheet = workbook.Sheets[firstSheet];
  const jsonData = xlsx.utils.sheet_to_json(worksheet);

  // 这里可以随便处理jsonData,比如存数据库或者返回给前端
  res.json({
    success: true,
    message: '转换成功',
    data: jsonData
  });
});

app.listen(3000, () => {
  console.log('服务器跑起来啦:http://localhost:3000');
});

3. 检查你的HTML代码

注意你的input标签必须有name属性,而且名字要和multer里的upload.single('file')一致(这里是file),比如:

<div class="input-field col s6">
  <form name="myForm" action="/sendFile" method="post" enctype="multipart/form-data">
    <input id="excelInput" type="file" name="file" accept=".xlsx"> <!-- name属性不能少! -->
    <button type="submit">提交转换</button>
  </form>
</div>

几个容易踩的坑

  • 千万别忘了给form加enctype="multipart/form-data",你已经加了但还是提醒下,没这个属性浏览器根本不会按文件上传的格式发请求
  • input的name属性和multer配置的要完全一致,比如multer写的是upload.single('excel'),那input的name就得是excel,不然接收不到文件
  • 别再用body-parser去解析这个请求了,它处理不了multipart类型的,反而可能搞出问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:33:48