Перейти к основному содержимому

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

· 2 мин. чтения

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 .