使用Node/Expressjs向MongoDB上传表单图片时加载报错如何解决
问题排查结果
核心错误出在Buffer.alloc()方法的错误调用:Buffer.alloc()的语法为Buffer.alloc(size[, fill[, encoding]]),第一个入参要求为数字类型的缓冲区容量大小,你代码中把base64编码后的字符串encode_img作为第一个参数传入,触发了参数类型不匹配的报错。
修复方案
方案1:直接替换错误方法
将代码中:
dp:Buffer.alloc(encode_img,'base64')
替换为:
dp: Buffer.from(encode_img, 'base64')
Buffer.from(string[, encoding])支持直接传入字符串和对应的编码格式,将base64字符串转为Buffer对象。
方案2:简化冗余转码流程
你已经通过fs.readFileSync()直接读取到了图片的原始Buffer,不需要多做一次转base64再转Buffer的操作,可以直接简化代码:
app.post('/register',upload.single('img'), (req, res) => { // 直接读取原始Buffer即可,无需额外转码 var img = fs.readFileSync(req.file.path); var final_dp={ contentType:req.file.mimetype, dp: img } // 后续原有逻辑 try { const password = req.body.fPass; const Spassword = req.body.sPass; if(password == Spassword){ var obj = { dp: final_dp, // 剩余业务字段
内容的提问来源于stack exchange,提问作者Guntuku Chaitanya
相关产品推荐
相关产品推荐

