Android(安卓)Base64解码失败问题
16lz
2021-01-26
一、现象描述
在开发过程中遇到了base64解码失败问题,ios和Android同时调用上传人脸数据,通过拍照拿到图片信息再装成base64字符串传给后台,此时发现ios上传的图片没有问题,Android端上传的时候后台却报了base64编解码失败,复制了日志信息的base64串去网站验证发现可以转换。
二、问题发现
经过一番折腾与思考,发现我Base64日志信息特别长,去官网验证时每次都删除调换行符,ding 灵机一动,猜测有可能是换行符原因导致
三、问题解决
在将base64字符串传给后台之前去掉换行符,经过验证确实可以解决问题,下面是去掉字符串换行符的代码,
faceBase64Url.replaceAll("[\\t\\n\\r]", "");
下面是图片转Base64的代码
public static String bitmapFaceToBase64(Bitmap bitmap) { // 要返回的字符串 String reslut = null; ByteArrayOutputStream baos = null; try { if (bitmap != null) { baos = new ByteArrayOutputStream(); /** * 压缩只对保存有效果bitmap还是原来的大小 */ bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); /** * 压缩只对保存有效果bitmap还是原来的大小 */ int options = 100; // 如果大于500kb则再次压缩,最多压缩三次 while (baos.toByteArray().length / 1024 > 500 && options > 10) { // 清空baos baos.reset(); // 这里压缩options%,把压缩后的数据存放到baos中 bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos); options -= 10; } // 转换为字符串 baos.flush(); baos.close(); Log.e("bingo", "最后大小:" + baos.toByteArray().length / 1024 + "k"); reslut = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); } else { return null; } } catch (IOException e) { e.printStackTrace(); } finally { try { if (baos != null) { baos.close(); } } catch (IOException e) { e.printStackTrace(); } } return reslut; }
四、存在疑问
不知道为什么ios转换后不需要去掉换行符。android却需要处理一下。
更多相关文章
- EditText输入框的长度调整
- android 字符串绘制示例
- Android加载大图防止OOM
- Android图片压缩浅谈
- 一个小码农的5年历程
- Android中Notification的framework层讲解
- FAQ_17 android string.xml 里面的 %
- Android中仿QQ聊天内容中提取电话号码,URL
- Android中TextView实现分段显示不同颜色的字符串