项目需要用json传base64到后端,后端把base64转成图片,json格式如下:
{
"image":"base64..."
}
用的是POST请求,但传到后端后base64的字符发生了变化,导致无法转成图片,发生的变化如下,第一个是正常的,第二个是发生的
正常:
传到后端获取结果:
如果不用json,用www-form表单形式传过去就正常
我用我自己搭建的spring项目传过去,是没有问题的,但是项目里就不行,这是什么原因?
代码如下,这是一个前置的接口拦截:
@WeaReplaceBefore(value = "/api/hrm/resful/synHrmresource",description = "拦截人员同步接口,同步人员信息",order = 1)
public void before(WeaBeforeReplaceParam param){
BufferedReader streamReader = null;
try {
streamReader = new BufferedReader(new InputStreamReader(param.getRequest().getInputStream()));
} catch (IOException e) {
throw new RuntimeException(e);
}
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
try {
while ((inputStr = streamReader.readLine()) != null) {
responseStrBuilder.append(inputStr);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
String params = responseStrBuilder.toString();
Gson gson = new Gson();
Map paramMap2 = gson.fromJson(params, (Type) Map.class);
String base64 = Util.null2String(paramMap2.get("base64"));
}
已解决,是项目中的安全包引起的
前端的base64是不是需要转一下啊,类似这样
new_base64code = encodeURIComponent(base64code)
base64编码和解码的问题吧,MIME 友好型 base64 编码和解码即编码后如果长度每大于 76 就会加入 \r\n 这样的换行控制符,就容易导致有问题。前后端编码前检查看看有没有 \r\n 这样的换行控制符
【相关推荐】
@RequestMapping("/user/historyImg")
public RespBean historyImg(@RequestBody UserChangePhoto userChangePhoto){
String userId = userChangePhoto.getUserId();
List<UserImg> allImgById = userimgMapper.findAllImgById(userId);
if (allImgById.size()<1){
return RespBean.error("历史头像为空");
}
return RespBean.success(allImgById);
}
其中上面的userId为返回给前端的用户id,下面的就是数据库中该用户所使用过的图片经过base64编码后的字节数组,前端可以将其进行base64解码后还原成图片。