Conversione da immagine a stringa Base64

1. Panoramica

In questo breve tutorial, tratteremo come codificare il file immagine in una stringa Base64 , quindi decodificarlo per recuperare l'immagine originale utilizzando Apache Common IO e le funzionalità native di Java 8 Base64.

Questa operazione può essere applicata a qualsiasi file binario o array binario. È utile quando è necessario trasferire contenuto binario in formato JSON, ad esempio dall'app mobile all'endpoint REST.

Per ulteriori informazioni sulla conversione Base64, consulta questo articolo qui.

2. Dipendenza da Maven

Aggiungiamo le seguenti dipendenze al file pom.xml :

 commons-io commons-io 2.6 

È possibile trovare l'ultima versione di Apache Commons IO su Maven Central.

3. Converti file immagine in stringa Base64

Prima di tutto, leggiamo il contenuto del file su un array di byte e usiamo la classe Java 8 Base64 per codificarlo:

byte[] fileContent = FileUtils.readFileToByteArray(new File(filePath)); String encodedString = Base64.getEncoder().encodeToString(fileContent);

L'encodedString è una stringa di caratteri nel set di A-Za-z0-9 + / , e il decodificatore respinge qualsiasi carattere di fuori di questo insieme.

4. Convertire la stringa Base64 in un file immagine

Ora abbiamo una stringa Base64 , decodifichiamola di nuovo in contenuto binario e scriviamo in un nuovo file:

byte[] decodedBytes = Base64.getDecoder().decode(encodedString); FileUtils.writeByteArrayToFile(new File(outputFileName), decodedBytes);

5. Testare il nostro codice

Infine, possiamo verificare che il codice funzioni correttamente leggendo un file, codificandolo in una stringa Base64 e decodificandolo in un nuovo file:

public class FileToBase64StringConversionUnitTest { private String inputFilePath = "test_image.jpg"; private String outputFilePath = "test_image_copy.jpg"; @Test public void fileToBase64StringConversion() throws IOException { // load file from /src/test/resources ClassLoader classLoader = getClass().getClassLoader(); File inputFile = new File(classLoader .getResource(inputFilePath) .getFile()); byte[] fileContent = FileUtils.readFileToByteArray(inputFile); String encodedString = Base64 .getEncoder() .encodeToString(fileContent); // create output file File outputFile = new File(inputFile .getParentFile() .getAbsolutePath() + File.pathSeparator + outputFilePath); // decode the string and write to file byte[] decodedBytes = Base64 .getDecoder() .decode(encodedString); FileUtils.writeByteArrayToFile(outputFile, decodedBytes); assertTrue(FileUtils.contentEquals(inputFile, outputFile)); } }

6. Conclusione

Questo articolo dettagliato spiega le basi della codifica del contenuto di qualsiasi file in una stringa Base64 e della decodifica di una stringa Base64 in un array di byte e del salvataggio in un file utilizzando le funzionalità di I / O comune di Apache e Java 8.

Come sempre, gli snippet di codice possono essere trovati su GitHub.