C'est peut-être un doublon mais je rencontre un problème pour convertir l'image en Base64
pour l’envoyer pour Http Post
. J'ai essayé ce code mais il m'a donné une mauvaise chaîne encodée.
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;
}
Sortie: [B @ 677327b6
Mais j’ai converti cette même image en Base64
dans de nombreux encodeurs en ligne et ils ont tous donné la bonne chaîne Base64.
Edit: Comment est-ce une copie ?? Le lien qui est en double de la mienne ne me donne pas la solution de convertir la chaîne que je voulais.
Qu'est-ce qui me manque ici ??
Le problème est que vous renvoyez la toString()
de l'appel à Base64.encodeBase64(bytes)
, qui renvoie un tableau d'octets. Donc, ce que vous obtenez à la fin est la représentation sous forme de chaîne par défaut d'un tableau d'octets, qui correspond à la sortie que vous obtenez.
Au lieu de cela, vous devriez faire:
encodedfile = new String(Base64.encodeBase64(bytes), "UTF-8");
Je pense que vous voudrez peut-être:
String encodedFile = Base64.getEncoder().encodeToString(bytes);
cela l'a fait pour moi. vous pouvez modifier les options du format de sortie en Base64.Default que ce soit.
// 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);