Detecta el tipo MIME basado en el contenido del archivo o la extensión del archivo. El paquete Nuget está disponible. Se incluyen archivos de muestra.
Este proyecto se basó originalmente en el archivo de análisis /usr/share/mime/magic (kali linux) ( base de datos MIME ). La ubicación puede diferir. Se puede encontrar más información sobre esta estructura de archivo aquí (sección "Los archivos mágicos").
Este archivo contiene definiciones de tipo MIME con varios conjuntos de reglas, que se aplican iterativamente al contenido del archivo dado para adivinar los tipos de MIME.
El formato del archivo original ( antiguo ) es difícil de modificar de acuerdo con sus necesidades. Decidí pasar al formato de archivo JSON ( nuevo ) con capacidades similares y algunas características nuevas. El nuevo formato podría modificarse y actualizarse fácilmente con nuevos conjuntos de reglas y definiciones de tipo MIME.
Ambos formatos de base de datos son compatibles. Se admite la conversión del antiguo al nuevo formato de base de datos. La detección por extensión solo se puede usar con un nuevo formato de archivo. La plantilla original y los archivos JSON se incluirán pronto.
Cada definición de MIME contiene una lista de conjuntos de reglas. Cada conjunto de reglas contiene una lista jerárquica de reglas. Reglas Conjunto de pseudocódigo:
// 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
// ...Cuando se aplica este conjunto de reglas, el resultado se calculará de la siguiente manera:
// Result (boolean) = 0 && (1 || 2 || 3) && 4 && (5 || 6)...Ejemplo de regla:
"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
}
}La converción del formato original (antiguo) a JSON (nuevo) es compatible
MimeMagicSharp . MimeMagicSharp . ConvertFromOriginalToJson ( "magic_original" , "magic_json_convert_test" , out string ConvertError ) ; Solo se leen los primeros 4096 bytes de archivo durante el procedimiento de detección de MIME. Puede extender este límite en el código fuente fácilmente.
Construir en vs 2017
Puede usar o modificar las fuentes como desee