通过http方式传递base64图片字符串无法还原成图片的原因

碰到个问题:后端将图片转成base64格式,通过json或者其实格式发给前端,前端接收到这个base64后无法还原成图片。

后来发现在使用http协议传递base64图片字符串的过程中,一些特殊字符会在传输过程中发生改变或者被添加了换行,所以需要前端接收到后进行处理,或者后端发送前处理一下。

后端处理方式

String strSrcImage = base64格式的字符串.replaceAll("[\s*	

]", "");

把这个strSrcImage发送给前端,前端接收到的base64就不会受特殊字符影响无法还原图片了


这里会出现问题还有个原因可能是使用了下面的方式进行编码


        BASE64Encoder encoder = new BASE64Encoder();
        //生成BASE64编码
        return encoder.encode(bytes);

点进这个encoder的源码看下

可以看到这里流转字节的时候,字节数组的大小被限定了,所以就会自动换行,通过http发送给前端后就会多一些换行符,所以没法再通过base64还原成图片


这里可以换种方式实现,使用java.util.Base64里面的方式实现

return Base64.getEncoder().encodeToString(bytes);

可以看到使用这种方式得到的base64字符串是一行到底的,虽然看着不是很舒服,但是不会出现特殊字符的问题

原文地址:https://www.cnblogs.com/lyd447113735/p/14899196.html