Перетворення рядка у зображення Base64

1. Огляд

У цьому короткому навчальному посібнику ми розглянемо, як кодувати файл зображення в рядок Base64 , а потім декодуємо його, щоб отримати вихідне зображення, використовуючи функції Apache Common IO та Java 8, власні Base64.

Цю операцію можна застосувати до будь-яких двійкових файлів або двійкових масивів. Це корисно, коли нам потрібно перенести двійковий вміст у форматі JSON, наприклад, з мобільного додатка на кінцеву точку REST.

Для отримання додаткової інформації про перетворення Base64 перегляньте цю статтю тут.

2. Залежність Мавена

Давайте додамо наступні залежності до файлу pom.xml :

 commons-io commons-io 2.6 

Ви можете знайти останню версію Apache Commons IO на Maven Central.

3. Перетворити файл зображення на рядок Base64

Перш за все, давайте прочитаємо вміст файлу в байтовому масиві і використаємо клас Java 8 Base64 для його кодування:

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

EncodedString є рядком символів в наборі A-Za-z0-9 + / , а декодер відкидає будь-які символи за межами цього набору.

4. Перетворення рядка Base64 у файл зображення

Тепер у нас є рядок Base64 , давайте декодуємо його назад до бінарного вмісту та запишемо у новий файл:

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

5. Тестування нашого кодексу

Нарешті, ми можемо перевірити правильність роботи коду, прочитавши файл, закодувавши його до рядка Base64 і декодувавши назад до нового файлу:

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. Висновок

Ця детальна стаття пояснює основи кодування вмісту будь-якого файлу до рядка Base64 та декодування рядка Base64 до байтового масиву та зберігає його у файл за допомогою функцій Apache Common IO та Java 8.

Як завжди, фрагменти коду можна знайти на GitHub.