ファイルコンテンツまたはファイル拡張機能に基づいてMIMEタイプを検出します。 Nugetパッケージが利用可能です。サンプルファイルが含まれています。
このプロジェクトはもともと、Parsing /usr/share/mime/magic (kali linux)ファイル( MIMEデータベース)に基づいていました。場所は異なる場合があります。このファイル構造の詳細については、こちらをご覧ください(「マジックファイル」セクション)。
このファイルには、いくつかのルールセットがあるMIMEタイプ定義が含まれており、MIMEタイプを推測するために、指定されたファイルのコンテンツに繰り返し適用されます。
元のファイルの形式(古い)は、ニーズに応じて変更するのが困難です。 Similary機能といくつかの新機能を備えたJSONファイル形式(新しい)に移ることにしました。新しい形式は、新しいルールセットとMIMEタイプの定義で簡単に変更および更新できます。
両方のデータベース形式がサポートされています。古いデータベース形式から新しいデータベース形式への変換がサポートされています。拡張による検出は、新しいファイル形式でのみ使用できます。テンプレートオリジナルファイルとJSONファイルはまもなく含まれます。
各MIME定義には、ルールセットのリストが含まれています。各ルールセットには、ルールの階層リストが含まれています。ルールセットpseudocode:
// 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バイトのみが読み取られます。この制限をソースコードで簡単に拡張できます。
2017年と2017年のビルド
必要なソースを使用または変更できます