Node.js环境下如何解析base64编码的CSV获取文件名与实际内容
实现方法
前置说明
你提供的base64不是单纯的CSV文件编码,是完整的multipart/form-data表单请求体的编码,其中已经包含了文件名、文件类型和CSV原始内容,无需额外依赖第三方库,用Node.js内置模块即可完成解析和导出。
实现步骤
- 第一步:将base64字符串解码为UTF-8文本
- 第二步:通过正则匹配从
Content-Disposition头中提取文件名 - 第三步:剥离表单边界、请求头等冗余信息,提取纯CSV内容
- 第四步:将CSV内容写入本地文件
完整代码示例
const fs = require('fs/promises'); // 你的base64字符串 const base64 = 'LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTExNDc2MDgwNjM5MTM4ODk4MTc2NTYwNA0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9ImNoYXJ0T2ZBY2NvdW50LmNzdiINCkNvbnRlbnQtVHlwZTogdGV4dC9jc3YNCg0K77u/QWNjb3VudE51bWJlcixBY2NvdW50TmFtZSxEZWR1Y3RhYmlsaXR5DQoxMTExLHRlZWUsMTAwDQoyMjIyMix0ZXN0LDEwMA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTExNDc2MDgwNjM5MTM4ODk4MTc2NTYwNC0tDQo='; async function extractAndSaveCsv() { // 解码base64为文本 const formContent = Buffer.from(base64, 'base64').toString('utf8'); // 提取文件名 const filenameMatch = formContent.match(/filename="([^"]+)"/); if (!filenameMatch) { throw new Error('未找到文件名信息'); } const filename = filenameMatch[1]; // 提取表单边界 const boundary = formContent.split('\r\n')[0]; // 分割得到文件块内容 const fileBlock = formContent.split(boundary)[1]; // 分割请求头和CSV内容 const [, csvRaw] = fileBlock.split('\r\n\r\n'); // 清除末尾的边界标识和换行 const csvContent = csvRaw.trimEnd().replace(/-+$/, '').trimEnd(); // 写入文件 await fs.writeFile(filename, csvContent, 'utf8'); console.log(`文件已保存:${filename}`); } extractAndSaveCsv().catch(console.error);
注意事项
- 运行代码后会在当前目录生成
chartOfAccount.csv文件,内容和原文件完全一致,保留原有UTF-8 BOM头 - 如果有大批量同类解析需求,可以引入
formidable等专门的multipart表单解析库简化代码,降低边界情况处理成本
内容的提问来源于stack exchange,提问作者gokublack
相关产品推荐
相关产品推荐

