如何将Node.js Buffer转换为原字符串?FormData传Blob遇异常
问题分析与解决方案
你的问题根源是前端封装Blob时传入了对象而非字符串,导致Blob存储的是对象默认toString()的结果[object Object],服务器自然只能解析出这个内容。以下是具体解决步骤:
前端正确封装方式
确保将目标字符串正确转换为Blob并传入FormData:
// 1. 定义要发送的原字符串 const targetString = "这里是你要发送的原字符串内容"; // 2. 用字符串数组构造Blob(Blob构造函数第一个参数必须是可迭代的二进制数据集合) const stringBlob = new Blob([targetString], { type: 'text/plain; charset=utf-8' }); // 3. 加入FormData const formData = new FormData(); formData.append('string_data', stringBlob);
注意:Blob构造函数的第一个参数必须是数组形式(哪怕只有单个字符串),如果直接传入对象(比如
new Blob(targetString)或new Blob({key: targetString})),就会触发对象的默认toString(),生成[object Object]。
服务器端Node.js解析方式
假设你用Express框架配合multer中间件处理multipart/form-data(这是处理FormData最常用的方案),解析代码如下:
const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer(); app.post('/receive', upload.single('string_data'), (req, res) => { // 从req.file.buffer中取出二进制数据,转成utf8字符串 const originalString = req.file.buffer.toString('utf8'); console.log('还原的原字符串:', originalString); res.send({ success: true, data: originalString }); });
如果没有用框架,直接处理HTTP请求,也要确保正确解析multipart/form-data格式的Body,提取对应字段的Buffer后用toString('utf8')还原。
常见错误排查
- 前端误将对象传入FormData:比如
formData.append('data', { content: targetString }),浏览器会自动把对象转为[object Object]字符串。 - Blob构造参数错误:未用数组包裹字符串,导致Blob存储的是对象的toString结果。
- 编码不匹配:如果前端Blob指定了非utf8编码(比如gbk),服务器端要对应使用
buffer.toString('gbk')解析。
内容的提问来源于stack exchange,提问作者BreenDeen
相关产品推荐
相关产品推荐

