1 概览

在这个简短的教程中,咱们将介绍如何应用 Apache Common IO 包和 Java 8 原生类 Base64 将图片文件转成 base64 字符串,而后把 base64 字符串再转成图片。

这个操作也能够利用到任何二进制文件或者二进制数组中。当咱们须要以 json 格局传输二进制内容的时候,例如从挪动app程序传到到 REST 端时,它十分有用。

2 Maven 依赖

增加一下依赖到 pom.xml 中:

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

你能够在 maven 地方仓库找到 commons-io 包的最新版本。Maven Central.

3 将图片转成 base64 字符串

首先,咱们将文件内容转成 byte 数组,而后应用 Java 8 的 Base64 类编码这个数组。

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

encodeToString 字段是 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 个性将其保留到文件中。

原文地址:https://www.baeldung.com/java...