Android Base 64の復号に失敗した問題

2229 ワード

一、現象の説明
開発の過程で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は処理する必要があります.