2016-04-08 36 views
7

Potrebbe trattarsi di un duplicato, ma sto affrontando qualche problema per convertire l'immagine in Base64 per inviarlo per Http Post. Ho provato questo codice ma mi ha dato una stringa codificata errata.Come convertire un'immagine in stringa base64 in java?

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; 
     } 

uscita: [B @ 677327b6

Ma mi sono convertito questa stessa immagine in Base64 in molti codificatori on-line e tutti dato la stringa corretta grande Base64.

Modifica: Come è un duplicato ?? Il link che è mio duplicato non mi dà la soluzione per convertire la stringa in quello che volevo.

Cosa mi manca qui ??

+0

Come state determinanti che questa sia la base 64 stringa non corretta? –

+0

come encoder online stanno restituendo grandi stringhe di base64 –

+0

Puoi fornire il codice per il metodo POST? Sono nello stesso problema (pubblica un'immagine ...) Grazie !! – Yekatandilburg

risposta

15

Il problema è che si restituisce il toString() della chiamata alla Base64.encodeBase64(bytes) che restituisce un array di byte. Quindi quello che ottieni alla fine è la rappresentazione di stringa predefinita di un array di byte, che corrisponde all'output che ottieni.

Invece, si dovrebbe fare:

encodedfile = new String(Base64.encodeBase64(bytes), "UTF-8"); 
+0

Che risolve il mio problema –

+2

String strBase64 = Base64.encodeToString (byteArray, 0) –

0

questo ha fatto per me. è possibile variare le opzioni per il formato di output in Base64.Default qualunque.

// 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); 
+0

dove inserire il mio file immagine ?? –

+0

qui, viene caricato in imageBitmap. metodo .compress lo converte e lo codifica in baos – MojioMS

+0

Base64.URL_SAFE questi non funzionano per me ?? cosa importa? –

4

penso che si potrebbe desiderare:

String encodedFile = Base64.getEncoder().encodeToString(bytes); 
+0

import org.apache.commons.codec.binary.Base64; Sto importando questo .. qui Base64 non ha getEncoder() cose simili –

+0

@setubasak si tratta di 'java.util.Base64' aggiunto in Java 8. – Pshemo