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
您可以根據需要使用或修改來源