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 特性将其保存到文件中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。