1. Обзор
В этом кратком руководстве мы рассмотрим, как кодировать файл изображения в строку Base64 , а затем декодировать его, чтобы получить исходное изображение с помощью Apache Common IO и Java 8 собственные функции Base64.
Эта операция может быть применена к любым двоичным файлам или двоичным массивам. Это полезно, когда нам нужно перенести двоичный контент в формате JSON, например, из мобильного приложения в конечную точку REST.
Для получения дополнительной информации о преобразовании Base64 ознакомьтесь с этой статьей здесь .
2. Зависимость Maven
Давайте добавим следующие зависимости в pom.xml файл:
commons-io commons-io 2.8.0
Вы можете найти последнюю версию Apache Commons IO на Maven Central .
3. Преобразуйте файл изображения в строку Base64
Прежде всего, давайте прочитаем содержимое файла в массив байтов и используем класс Java 8 Base64 для его кодирования:
byte[] fileContent = FileUtils.readFileToByteArray(new File(filePath)); String encodedString = Base64.getEncoder().encodeToString(fileContent);
Закодированная строка представляет собой Строку символов в наборе A-Za-z0-9+/ , и декодер отклоняет любые символы за пределами этого набора.
4. Преобразуйте строку Base64 в файл изображения
Теперь у нас есть Base64 String , давайте декодируем его обратно в двоичный контент и запишем в новый файл:
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 String , а также декодирования Base64 String в массив байтов и сохранения его в файл с помощью функций Apache Common IO и Java 8.
Как всегда, фрагменты кода можно найти на GitHub .