android10base64错误,Android Base64解码失败问题
一、现象描述在开发过程中遇到了base64解码失败问题,ios和Android同时调用上传人脸数据,通过拍照拿到图片信息再装成base64字符串传给后台,此时发现ios上传的图片没有问题,Android端上传的时候后台却报了base64编解码失败,复制了日志信息的base64串去网站验证发现可以转换。二、问题发现经过一番折腾与思考,发现我Base64日志信息特别长,去官网验证时每次都删除调换行符,
一、现象描述
在开发过程中遇到了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却需要处理一下。
更多推荐
所有评论(0)