Обнаружает тип MIME на основе содержимого файла или расширения файла. Пакет Nuget доступен. Примеры файлов включены.
Этот проект первоначально был основан на файле файла parsing /usr/share/mime/magic (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 ) ; Только первые 4096 байт файла читаются во время процедуры обнаружения MIME. Вы можете легко расширить этот предел в исходном коде.
Построить в VS 2017
Вы можете использовать или изменить источники, как хотите