前端通过Dropzone上传文件至Amazon S3时遇Unsupported body payload object错误
解决AWS S3上传报错:Unsupported body payload object
哎,这个问题我之前也碰到过!你现在遇到的Unsupported body payload object报错,核心原因是你传给AWS SDK的不是真正的Node.js Buffer实例——看你后端收到的buffer是{ type: 'Buffer', data: [Array] },这其实是Buffer被JSON序列化后的普通对象,不是原生Buffer,SDK根本不认它。
解决步骤:
第一步,把序列化后的buffer对象转成原生Buffer:
// 从序列化的buffer对象中取出data数组,生成真正的Buffer实例 const fileBuffer = Buffer.from(data.patientfile.file.buffer.data);第二步,修正上传参数(注意Key用原始文件名避免覆盖):
var params = { Bucket: myBucket, Key: data.patientfile.file.originalname, // 用originalname代替fieldname,防止不同文件重名覆盖 Body: fileBuffer };第三步,重新执行上传操作:
s3.upload(params, function (err, data) { if (err) { console.log("上传失败:", err); } else { console.log("上传成功!文件地址:", data.Location); } });
补充说明:
为什么会出现这个序列化后的buffer?因为前端用Dropzone传文件到后端时,如果后端框架自动将请求体解析成JSON格式,原生Buffer会被转换成{type: 'Buffer', data: [Array]}这种可序列化的普通对象,而不是保留Buffer实例。所以必须手动将它转成原生Buffer,AWS SDK才能正常处理。
内容的提问来源于stack exchange,提问作者tetar
相关产品推荐
相关产品推荐

