通过http方式传递base64图片字符串无法还原成图片的原因
碰到个问题:后端将图片转成base64格式,通过json或者其实格式发给前端,前端接收到这个base64后无法还原成图片。
后来发现在使用http协议传递base64图片字符串的过程中,一些特殊字符会在传输过程中发生改变或者被添加了换行,所以需要前端接收到后进行处理,或者后端发送前处理一下。
后端处理方式
String strSrcImage = base64格式的字符串.replaceAll("[\\s*\t\n\r]", "");
把这个strSrcImage发送给前端,前端接收到的base64就不会受特殊字符影响无法还原图片了
这里会出现问题还有个原因可能是使用了下面的方式进行编码
BASE64Encoder encoder = new BASE64Encoder();
//生成BASE64编码
return encoder.encode(bytes);
点进这个encoder的源码看下
可以看到这里流转字节的时候,字节数组的大小被限定了,所以就会自动换行,通过http发送给前端后就会多一些换行符,所以没法再通过base64还原成图片
这里可以换种方式实现,使用java.util.Base64里面的方式实现
return Base64.getEncoder().encodeToString(bytes);
可以看到使用这种方式得到的base64字符串是一行到底的,虽然看着不是很舒服,但是不会出现特殊字符的问题