Android Base 64の復号に失敗した問題
2229 ワード
一、現象の説明
開発の過程でbase 64の復号化に失敗した問題に遭遇し、iosとAndroidは同時にアップロード顔データを呼び出し、写真を撮って画像情報を手に入れてbase 64文字列を装ってバックグラウンドに伝えた.この時iosがアップロードした画像に問題はないことが分かった.Android側がアップロードした時、バックグラウンドはbase 64の復号化に失敗したと報告し、ログ情報をコピーしたbase 64列はウェブサイトに行って検証し、変換できることが分かった.
二、問題発見
いろいろ考えた結果、私のBase 64ログ情報はとても長いことがわかりました.公式サイトに行って検証するたびに、行を変える記号を削除します.dingは機転が利いて、改行記号の原因かもしれないと推測しています.
三、問題解決
base 64文字列をバックグラウンドに渡す前に改行を削除し、検証して問題を解決することができます.以下は文字列改行を削除するコードです.
以下は画像転送Base 64のコードです
四、疑問がある
なぜios変換後に改行を削除する必要がないのか分かりません.Androidは処理する必要があります.
開発の過程でbase 64の復号化に失敗した問題に遭遇し、iosとAndroidは同時にアップロード顔データを呼び出し、写真を撮って画像情報を手に入れてbase 64文字列を装ってバックグラウンドに伝えた.この時iosがアップロードした画像に問題はないことが分かった.Android側がアップロードした時、バックグラウンドはbase 64の復号化に失敗したと報告し、ログ情報をコピーしたbase 64列はウェブサイトに行って検証し、変換できることが分かった.
二、問題発見
いろいろ考えた結果、私のBase 64ログ情報はとても長いことがわかりました.公式サイトに行って検証するたびに、行を変える記号を削除します.dingは機転が利いて、改行記号の原因かもしれないと推測しています.
三、問題解決
base 64文字列をバックグラウンドに渡す前に改行を削除し、検証して問題を解決することができます.以下は文字列改行を削除するコードです.
faceBase64Url.replaceAll("[\\t\
\\r]", "");
以下は画像転送Base 64のコードです
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は処理する必要があります.