Рубрики
Без рубрики

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

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

Автор оригинала: Hai Nguyen.

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 .