动态识别由base64编码的文件的类型

时间:2019-07-22 13:04:53

标签: java base64

我正在使用Java 8 base64编码和解码库,而我已成功编码了jpg / pdf / png文件,并能够再次将该base64字符串保存为jpg / pdf / png。但是我的要求是动态检测文件类型,然后以相应的方式将该字符串保存到图像文件中。例如,如果我得到一个base64 pdf文件,则我的应用程序会自动检测到该字符串为Base64 pdf字符串,并将该字符串另存为pdf。

2 个答案:

答案 0 :(得分:1)

大多数众所周知的文件类型在文件开头都有“幻数”。这些字节用于标识文件类型,而无需知道文件扩展名。例如:

  • 所有JPEG均以:FF D8 FF DB
  • 开头
  • 所有PDF的开头是:25 50 44 46 2d
  • 所有PNG开头为:89 50 4E 47 0D 0A 1A 0A

这些内容位于https://en.wikipedia.org/wiki/List_of_file_signatures上,但是如果此列表不包含所需格式的值,则可以查询该格式的已发布规范。

解码完base64字符串后,您可以检查前几个字节以查看它们是否与这些常量匹配,并进行适当处理。

答案 1 :(得分:0)

简而言之:设计上您不能从base64编码的String本身读取格式。 根据从哪里获取base64字符串,您可以做两件事。

向编码器添加信息

在已编码的字符串中添加文件类型信息,前X位或后X位都可以,并可以从您首先编码的文件中读取它们,然后确定这些位中所含文件的类型。

读取魔术数字

您提到的每个文档在其文件中都有特定的文件类型相关的开头(标题/幻数)。如果您读取了魔幻数字,则可以确定文件适合的文件类型(但永远不要相信此决定)。 https://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files

相关问题