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

基于Express的Google Cloud Function:ArrayBuffer转CSV可读行报错

解决CSV上传时ArrayBuffer转可读行的问题

你代码里的两个核心错误导致了ENAMETOOLONG报错:

  • fs.createReadStream()的参数是文件路径,不是二进制buffer,它把整个buffer当成文件名处理,自然触发过长错误
  • multer使用memoryStorage时,上传的文件数据存在req.file.buffer,而非req.body,你取错了数据源

修正后的代码如下:

import csv from 'csv-parser';
import multer from 'multer';
import { Readable } from 'stream';

const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

app.post("/upload", upload.single('csvFile'), async(req, res) => {
    // 从multer处理后的req.file中获取文件buffer
    const fileBuffer = req.file.buffer;

    // 将二进制buffer转换为可读流,再传入csv-parser处理
    Readable.from(fileBuffer)
        .pipe(csv())
        .on('data', (row) => {
            console.log(row);
            // 在这里添加将row写入数据库的逻辑
        })
        .on('end', () => {
            res.send('File uploaded and processed successfully');
        })
        .on('error', (err) => {
            res.status(500).send(`处理失败:${err.message}`);
        });
});

额外注意事项:

  • Readable.from()是Node.js v12.3.0及以上版本支持的API,Google Cloud Functions的运行环境满足这个要求
  • 一定要监听error事件,避免CSV解析出错时请求无响应
  • 如果需要自定义CSV解析规则,可以在csv()方法中传入配置参数,比如csv({ separator: ';' })指定分隔符

内容的提问来源于stack exchange,提问作者Rhys Werner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:34:57