重複している可能性がありますが、Base64
に送信するために画像をHttp Post
に変換する際に問題が発生しています。このコードを試しましたが、エンコードされた文字列が間違っています。
public static void main(String[] args) {
File f = new File("C:/Users/SETU BASAK/Desktop/a.jpg");
String encodstring = encodeFileToBase64Binary(f);
System.out.println(encodstring);
}
private static String encodeFileToBase64Binary(File file){
String encodedfile = null;
try {
FileInputStream fileInputStreamReader = new FileInputStream(file);
byte[] bytes = new byte[(int)file.length()];
fileInputStreamReader.read(bytes);
encodedfile = Base64.encodeBase64(bytes).toString();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return encodedfile;
}
出力: [B @ 677327b6
しかし、この同じ画像を多くのオンラインエンコーダーでBase64
に変換すると、それらはすべて正しい大きなBase64文字列を与えました。
編集:どのように重複していますか??私の複製であるリンクは、私が望んでいたものを文字列に変換する解決策を与えてくれません。
ここに何が欠けていますか?
問題は、バイト配列を返すtoString()
への呼び出しのBase64.encodeBase64(bytes)
を返すことです。最終的に得られるのは、バイト配列のデフォルトの文字列表現です。これは、得られる出力に対応します。
代わりに、次のことを行う必要があります。
encodedfile = new String(Base64.encodeBase64(bytes), "UTF-8");
あなたが望むかもしれないと思う:
String encodedFile = Base64.getEncoder().encodeToString(bytes);
これは私のためにそれをしました。出力形式のオプションをBase64.Defaultに変更できます。
// encode base64 from image
ByteArrayOutputStream baos = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
encodedString = Base64.encodeToString(b, Base64.URL_SAFE | Base64.NO_WRAP);