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

如何将Node.js Express后端接收的XLSX/CSV文件转为JSON?

将上传的XLSX/CSV Buffer转换为JSON对象

前置依赖安装

你需要安装表格文件处理工具库,同时确保已启用express-fileupload中间件(你的代码已在使用它):

npm install xlsx csv-parser @types/express-fileupload --save

后端处理代码修改

以下是适配需求的index.ts,支持将XLSX/CSV格式的Buffer直接转换为JSON对象:

import express from 'express';
import fileUpload from 'express-fileupload';
import * as XLSX from 'xlsx';
import csvParser from 'csv-parser';
import { Readable } from 'stream';

const app = express();
app.use(fileUpload());

app.post('/partners', async function (req, res) {
  if (!req.files || Object.keys(req.files).length === 0) {
    return res.status(400).send('No files were uploaded.');
  }

  // 获取上传文件对象
  const inputFile = req.files.input1 as fileUpload.UploadedFile;
  const fileBuffer = inputFile.data;
  const fileName = inputFile.name;
  const mimeType = inputFile.mimetype;
  let jsonResult: Record<string, any>[] = [];

  try {
    // 处理XLSX文件
    if (mimeType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || fileName.endsWith('.xlsx')) {
      const workbook = XLSX.read(fileBuffer, { type: 'buffer' });
      // 取第一个工作表转换为JSON(默认以表头为对象键名)
      const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
      jsonResult = XLSX.utils.sheet_to_json(firstSheet);
    } 
    // 处理CSV文件
    else if (mimeType === 'text/csv' || fileName.endsWith('.csv')) {
      await new Promise<void>((resolve, reject) => {
        // 将Buffer转为可读流,供csv-parser逐行解析
        const stream = Readable.from(fileBuffer);
        stream
          .pipe(csvParser())
          .on('data', (row) => jsonResult.push(row))
          .on('end', resolve)
          .on('error', reject);
      });
    } 
    // 不支持的文件类型
    else {
      return res.status(400).send('仅支持XLSX和CSV格式文件');
    }

    // 输出转换结果并返回给前端
    console.log('转换后的JSON:', jsonResult);
    res.status(200).json({ data: jsonResult });
  } catch (err) {
    console.error('文件处理失败:', err);
    res.status(500).send('文件处理出错');
  }
});

app.listen(3000, () => {
  console.log('服务器运行在端口3000');
});

核心逻辑说明

  • XLSX解析:通过xlsx库直接读取Buffer格式的文件,sheet_to_json方法自动将工作表转换为JSON数组,默认以表格第一行作为对象的键名。
  • CSV解析:将Buffer转换为可读流,借助csv-parser逐行解析CSV内容,最终收集为JSON数组。
  • 格式校验:同时通过MIME类型和文件扩展名判断文件格式,避免单一校验规则的误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:10:31