Detecta o tipo MIME com base no conteúdo do arquivo ou na extensão do arquivo. O pacote NUGET está disponível. Os arquivos de amostra estão incluídos.
Este projeto foi originalmente baseado no arquivo Parsing /USR/Share/MIME/Magic (Kali Linux) ( Mime Database ). A localização pode ser diferente. Mais informações sobre essa estrutura de arquivos podem ser encontradas aqui (seção "Os arquivos mágicos").
Este arquivo contém definições de tipo MIME com vários conjuntos de regras, que são aplicados iterativamente ao conteúdo do arquivo fornecido para adivinhar os tipos de MIME.
O formato do arquivo original ( antigo ) é difícil de modificar de acordo com suas necessidades. Decidi passar para o JSON File Format ( New ) com recursos semelhantes e alguns novos recursos. O novo formato pode ser facilmente modificado e atualizado com novos conjuntos de regras e definições de tipo MIME.
Ambos os formatos de banco de dados são suportados. A conversão do formato antigo para o novo banco de dados é suportado. A detecção por extensão pode ser usada apenas com o novo formato de arquivo. Os arquivos originais e json de modelo serão incluídos em breve.
Cada definição MIME contém uma lista de conjuntos de regras. Cada conjunto de regras contém uma lista hierárquica de regras. Conjunto de regras 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
// ...Quando este conjunto de regras for aplicado, o resultado será calculado da seguinte maneira:
// Result (boolean) = 0 && (1 || 2 || 3) && 4 && (5 || 6)...Exemplo de regra:
"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
}
}A conversão do formato original (antigo) para JSON (new) é suportada
MimeMagicSharp . MimeMagicSharp . ConvertFromOriginalToJson ( "magic_original" , "magic_json_convert_test" , out string ConvertError ) ; Somente os primeiros 4096 bytes de arquivo são lidos durante o procedimento de detecção MIME. Você pode estender esse limite facilmente o código -fonte.
Construa no VS 2017
Você pode usar ou modificar as fontes, como quiser