Conversion d'image en chaîne de base64

1. Vue d'ensemble

Dans ce tutoriel rapide, nous allons expliquer comment encoder un fichier image en une chaîne Base64 , puis le décoder pour récupérer l'image d'origine à l'aide des fonctionnalités natives d'Apache Common IO et de Java 8 Base64.

Cette opération peut être appliquée à tous les fichiers binaires ou tableaux binaires. C'est utile lorsque nous devons transférer du contenu binaire au format JSON, par exemple d'une application mobile vers un point de terminaison REST.

Pour plus d'informations sur la conversion Base64, consultez cet article ici.

2. Dépendance de Maven

Ajoutons les dépendances suivantes au fichier pom.xml :

 commons-io commons-io 2.6 

Vous pouvez trouver la dernière version d'Apache Commons IO sur Maven Central.

3. Convertir le fichier image en chaîne Base64

Tout d'abord, lisons le contenu du fichier dans un tableau d'octets et utilisons la classe Java 8 Base64 pour l'encoder:

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

La chaîne encodedString est une chaîne de caractères dans l'ensemble de A-Za-z0-9 + / , et le décodeur rejette tous les caractères en dehors de cet ensemble.

4. Convertir la chaîne Base64 en fichier image

Maintenant, nous avons une chaîne Base64 , décodons-la en contenu binaire et écrivons dans un nouveau fichier:

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

5. Tester notre code

Enfin, nous pouvons vérifier que le code fonctionne correctement en lisant un fichier, en l'encodant en une chaîne Base64 et en le décodant dans un nouveau fichier:

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. Conclusion

Cet article explicite explique les bases de l'encodage du contenu de n'importe quel fichier en une chaîne Base64 , du décodage d'une chaîne Base64 en un tableau d'octets et de son enregistrement dans un fichier à l'aide des fonctionnalités Apache Common IO et Java 8.

Comme toujours, des extraits de code peuvent être trouvés sur GitHub.