UNIX命令file根据文件的内容确认一个文件类型,而不是使用文件扩展名。例如,每个GIF文件都以字符GIF开始,每个JPEG文件都以big-endian序的值oxffd8开始。
file命令要查询一个ASCII文本文件,该文件一般位于/etc/magic中。你可以在一台UNIX机器的man页查看magic来浏览其格式。在Apache Web服务器上也有类似的文件。它一般用来确认自己不知道的扩展名的文件,然后返回正确的MIME类型。Apache的版本很简单,其处理范围只包含一些很可能出现在Web服务器中的文件。
数据库可以使用一个相似的技术来确定一个BLOB列的MIME类型。大多数据库应用程序在存储数据的时候还会存储某种类型的标识。然而,可能对于某些人来说不能正确地标识数据。因此,通过直接分析数据来检查BLOB值的magic值然后返回一个MIME类型和解码信息将会很有用。
将magic安装到数据库
安装magic的过程使用一个Perl脚本产生一种可以使用SQL*Loader装载到数据库的标准化格式。数据然后由一个PL/SQL函数来扫描,该函数试图确定BLOB的数据。下面是建立数据的步骤以及一个例子:
第一步:创建一个Perl脚本将magic转成一个SQL*Loader数据文件:
|
第二步:在 SQL*Plus 中使用下面的 SQL 脚本创建表来保存这个数据:
|
第三步:使用 SQL*Loader 将前面产生的数据装载到数据库中:
|
下面是一些测试数据,只有一个 BLOB 列的一个简单的表。
|
第四步:使用 SQL*Loader 从文件装载三个图像到这个表:
|
下面是扫描 magic 数据表和 BLOB 以确定文件 MIME 类型的 PL/SQL 函数:
|
现在为了显示它确实可以工作,我运行下面的 SQL 语句:
|
得到的输出是:
|
