基于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
相关产品推荐
相关产品推荐

