MimeMagicSharp
1.0.0
根据文件内容或文件扩展名检测MIME类型。 Nuget软件包可用。包括示例文件。
该项目最初基于解析/usr/share/mime/魔术(Kali Linux)文件( MIME数据库)。位置可能不同。有关此文件结构的更多信息可以在此处找到(“魔术文件”部分)。
该文件包含具有几个规则集的MIME类型定义,这些定义迭代地应用于给定文件的内容以猜测MIME类型。
原始文件的格式(旧)很难根据您的需求进行修改。我决定使用具有相似功能和一些新功能的JSON文件格式(新)。新格式可以通过新规则集和MIME类型定义轻松修改和更新。
支持两种数据库格式。支持从旧数据库格式转换为新的数据库格式。通过扩展检测只能与新的文件格式一起使用。模板原始文件和JSON文件将很快包含。
每个MIME定义都包含规则集的列表。每个规则集都包含一个规则列表。规则集伪代码:
// Level 0 rules: Rule 0
// Level 1 rules: Rule 1, Rule 2, Rule 3
// Level 2 rules: Rule 4
// Level 3 rules: Rule 5, Rule 6
// ...应用此规则集时,将以以下方式计算结果:
// Result (boolean) = 0 && (1 || 2 || 3) && 4 && (5 || 6)...规则示例:
"Name" : "application/x-deb" ,
"Description" : "Debian package" ,
"Extensions" : [ "deb" ] ,
"RuleSet" : [
{
"Rule" : [
{
"Level" : 0 ,
"Offset" : 0 ,
"Range" : 0 ,
"Data" : "213C617263683E" ,
"DataUTF8" : "!<arch>"
} ,
{
"Level" : 1 ,
"Offset" : 8 ,
"Range" : 0 ,
"Data" : "64656269616E" ,
"DataUTF8" : "debian"
}
]
} , "Rule" : [ .. .
] .. . // Database File (new or old)
string MagicFile = Path . Combine ( Environment . CurrentDirectory , "magic" ) ;
using ( MimeMagicSharp . MimeMagicSharp ms = new MimeMagicSharp . MimeMagicSharp ( MimeMagicSharp . EMagicFileType . Json , MagicFile ) )
{
try
{
foreach ( MimeTypeGuess mimeTypeGuess in ms . AssumeMimeType ( EMimeTypeBy . Content ,
Path . Combine ( Environment . CurrentDirectory , "Newtonsoft.Json.xml" ) ) )
{
// Iterate over results
}
}
catch ( Exception Ex )
{
// Handle errors
}
}支持从原始(旧)格式转换为JSON(新)
MimeMagicSharp . MimeMagicSharp . ConvertFromOriginalToJson ( "magic_original" , "magic_json_convert_test" , out string ConvertError ) ; 在MIME检测过程中,仅读取第一个4096字节的文件。您可以轻松地在源代码中扩展此限制。
建立在VS 2017
您可以根据需要使用或修改来源