web-dev-qa-db-fra.com

Comment convertir une image en chaîne base64 en java?

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 ??

19
Setu Kumar Basak

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");
24
Lolo

Je pense que vous voudrez peut-être:

String encodedFile = Base64.getEncoder().encodeToString(bytes);
8
Joels Elf

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);
4
MojioMS