如何将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
相关产品推荐
相关产品推荐

