图像转换为Base64字符串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/neweastsun/article/details/82226907

图像转换为Base64字符串

本文我们讨论使用Apache Common IO 和 Java 8 自带 Base64 功能把图像文件转为Base64字符串,并反向解码为原图像.

该转换可以应用于任何二进制文件或二进制数组。当我们需要将JSON格式的二进制内容(例如从移动应用程序到REST端点)传输到REST端点时,它非常有用。

maven 依赖

首先我们需要在项目引入依赖,这里示例maven:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

转换图像文件至Base64字符串

首先,我们读文件内容值字节数组,然后使用java8 Base64类编码:

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

encodedString是a- za -z0-9+/集合中的字符串,解码器不会解析集合之外的任何字符。

转换Base64字符串至图像文件

现在我们把Base64字符串解码至二进制内容并写至新的图像文件:

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

测试代码

最后写单元测试验证代码是否正常工作,我们验证读取文件编码为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));
    }
}

总结

本文详细介绍了将任何文件的内容编码为Base64字符串、将Base64字符串解码为字节数组并使用Apache Common IO 和 Java 8 基本特性将其保存到文件中。

猜你喜欢

转载自blog.csdn.net/neweastsun/article/details/82226907