1. Обзор
В этом кратком руководстве мы рассмотрим, как кодировать файл изображения в строку
Base64 , а затем декодировать его, чтобы получить исходное изображение с использованием Apache Common IO и собственных функций Base64 Java 8.
Эту операцию можно применять к любым бинарным файлам или бинарным массивам. Это полезно, когда нам нужно передать двоичный контент в формате JSON, например, из мобильного приложения в конечную точку REST.
Для получения дополнительной информации о преобразовании Base64 ознакомьтесь с этой статьей здесь .
2. Зависимость от Maven
Добавим в файл pom.xml
следующие зависимости :
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
Вы можете найти последнюю версию 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 .