Express中body-parser致Base64字符串损坏,请求排查问题
问题分析与解决办法
核心原因是body-parser的urlencoded中间件配置问题
当移动端发送请求的Content-Type为application/x-www-form-urlencoded时,body-parser的urlencoded中间件默认遵循该格式的规范,会把字符串里的+解析成空格——但Base64中的+是编码的有效组成部分,被替换后直接导致图片数据损坏,传给Google接口自然报错。Postman能正常工作,是因为你在Postman中使用了正确的Content-Type(比如application/json或text/plain),不会触发urlencoded的解析规则。解决办法
- 调整客户端请求的Content-Type:让移动端发送请求时,将Content-Type设为
application/json(把Base64放在JSON结构中)或者text/plain,这样服务器会用对应的json或text中间件解析,不会替换+字符。 - 修改urlencoded中间件配置(仅当必须使用
application/x-www-form-urlencoded格式时):给urlencoded中间件添加配置参数,同时在路由处理中手动将空格还原为+:app.use(bodyParser.urlencoded({ extended: false, parameterLimit: 1000000 })); // 路由处理逻辑里还原Base64字符串 const validBase64 = req.body.image.replace(/ /g, '+'); - 优先推荐第一种方案,因为它符合不同Content-Type的规范,能避免后续出现其他编码相关问题。
- 调整客户端请求的Content-Type:让移动端发送请求时,将Content-Type设为
内容的提问来源于stack exchange,提问作者Phil Lucks
相关产品推荐
相关产品推荐

