应用程序检测文件的 MIME 类型的方法如下所示:
应用程序使用文件内容探测指令在文件中搜索一个特定样式。文件内容探测指令将文件中的一个特定样式与一种 MIME 类型相关联。如果应用程序找到了与该样式相匹配的项,则该文件的 MIME 类型就是与该样式相关联的 MIME 类型。
如果内容探测指令无法确定文件的 MIME 类型,那么应用程序可以检查文件名。应用程序将根据 MIME 类型注册表检查文件名。MIME 类型注册表将特定的文件扩展名和文件名样式与特定的 MIME 类型相关联。如果找到了与该文件名相匹配的项,则该文件的 MIME 类型就是与该扩展名或样式相关联的 MIME 类型。
下文提供了有关文件内容探测指令和 MIME 类型注册表的详细信息。
文件内容探测指令在文件 /etc/gnome-vfs-mime-magic 中指定。以下是文件内容探测指令的一个示例:
0 string \x89PNG image/png
文件内容探测指令的语法如下所示:
offset_start[:offset_end] pattern_type pattern [&pattern_mask] type
表 5–1介绍文件内容探测指令中的各个字段。
表 5–1 文件内容探测指令中的字段
字段 |
说明 |
---|---|
offset_start |
指定在文件中搜索文本样式之前要忽略的字符数。 |
pattern_type |
指定要搜索的样式类型。发布本指南时,string 样式类型是唯一受支持的样式类型。 |
pattern |
指定要搜索的样式。 |
pattern_mask |
指定样式掩码,格式为十六进制。有关样式掩码的更多信息,请参阅下一节。 此字段是可选的。上面的示例中没有此字段。 |
type |
指定与此项匹配的文件的相应 MIME 类型。 |
样式掩码标识在文件中搜索样式时忽略样式中的哪些数据位。下面是一个带有样式掩码的文件内容探测指令的示例:
0 string BMxxxx\000\000 &0xffff00000000ffff image/bmp
上例中的样式和掩码如下所示:
样式 |
B |
M |
x |
x |
x |
x |
\000 |
\000 |
掩码 |
ff |
ff |
00 |
00 |
00 |
00 |
ff |
ff |
该样式和掩码指定一个具有以下特性的文件:
文件以 BM 开头。
BM 后面是长度为四个字节的任意值。
这四个字节后面是 \000\000。
这个文件内容探测指令指定:与该样式和掩码匹配的文件的 MIME 类型为 image/bmp。
MIME 类型注册表位于 /usr/share/mime-info。MIME 类型注册表包含以下文件:
文件 |
文件扩展名 |
---|---|
MIME 信息文件 |
.mime |
MIME 键文件 |
.keys |
下文介绍 MIME 信息文件和 MIME 键文件。
MIME 信息文件将 MIME 类型与以下两项,或两项中的任意一项相关联。
文件扩展名
文件名样式
当应用程序搜索文件的 MIME 类型时,应用程序将根据 MIME 信息文件检查文件名。如果找到了与该文件名相匹配的项,则该文件的 MIME 类型就是与该扩展名或样式相关联的 MIME 类型。
在 MIME 信息文件中,要搜索的文件名样式以范式编写。
MIME 信息文件中的 MIME 类型项的格式如下所示:
MIME-type ext[,priority]: list-of-extensions regex[,priority]: list-of-regular-expressions
可以为文件扩展名和常规表达式指定一个优先级。可以使用优先级来区别复合文件名。例如,您可以对 .gz 扩展名指定优先级 1,对 .tar.gz 扩展名指定更高的优先级 2。在此情况下,文件 abc.tar.gz 会使用 .tar.gz 的 MIME 类型。
您必须用制表符 (\t) 缩进 ext 字段和 regex 字段。
以下 MIME 类型项是 gnome-vfs.mime MIME 信息文件中的范例:
application/x-compressed-tar regex,2: tar\.gz$ ext: tgz audio/x-real-audio ext: rm ra ram image/jpeg ext: jpe jpeg jpg image/png ext: png text/html ext: html htm HTML text/plain ext: asc txt TXT text/x-readme regex: README.*
文件管理器将按照字母顺序读取 MIME 信息文件。MIME 信息文件的字母顺序决定将 MIME 类型指定给文件扩展名或范式的顺序。例如,如果对文件 abc.mime 和 def.mime 中的不同 MIME 类型指定了相同的文件扩展名,则使用 abc.mime 中的 MIME 类型。
MIME 键文件提供有关用户界面中使用的一个 MIME 类型的信息。例如,MIME 键文件提供有关某个 MIME 类型的说明,并指定一个图标来表示属于该 MIME 类型的文件。
下面是 MIME 键文件的一个示例:
text/html description=HTML page icon_filename=gnome-text-html default_action_type=application short_list_application_ids_for_novice_user_level=mozilla,netscape,galeon category=Documents/World Wide Web
必须使用制表符 (\t) 将 MIME 键文件中的键缩进。
表 5–2介绍 MIME 键文件中最重要的键。通常会本地化 description 键和 category 键。
表 5–2 MIME 键文件中的键
键 |
说明 |
---|---|
can_be_executable |
指定属于该 MIME 类型的文件是否可以执行。 |
description |
提供有关该 MIME 类型的说明。这些说明可在文件管理器和其他应用程序中显示。 |
icon_filename |
指定表示该 MIME 类型的图标的文件名。不指定文件名的路径或文件扩展名。 该图标可在文件管理器和其他应用程序中显示。 |
default_action_type |
指定当用户打开属于该 MIME 类型的文件时,执行哪类操作。对于大多数应用程序,应输入该 MIME 类型的相应 application。 |
short_list_application_ids _for_novice_user_level |
指定当用户打开属于该 MIME 类型的文件时,使用哪个应用程序。可以按照优先顺序指定一个或多个应用程序。这些应用程序也必须在应用程序注册表中注册。 |
category |
为该 MIME 类型指定一个类别。这个键的值决定 MIME 类型在 |