Détecte le type MIME en fonction du contenu de fichier ou de l'extension de fichier. Le package NuGet est disponible. Les exemples de fichiers sont inclus.
Ce projet était à l'origine basé sur le fichier d'analyse / usr / share / mime / magic (Kali Linux) ( base de données MIME ). L'emplacement peut différer. Plus d'informations sur cette structure de fichiers ont pu être trouvées ici (section "les fichiers magiques").
Ce fichier contient des définitions de type MIME avec plusieurs ensembles de règles, qui sont appliqués de manière itérative au contenu du fichier donné pour deviner les types MIME.
Le format du fichier d'origine ( ancien ) est difficile à modifier en fonction de vos besoins. J'ai décidé de passer au format de fichier JSON ( nouveau ) avec des capacités similaires et de nouvelles fonctionnalités. Le nouveau format pourrait être facilement modifié et mis à jour avec de nouveaux ensembles de règles et des définitions de type MIME.
Les deux formats de base de données sont pris en charge. La conversion de l'ancien au format de base de données est prise en charge. La détection par extension ne peut être utilisée qu'avec un nouveau format de fichier. Modèle Les fichiers originaux et JSON seront bientôt inclus.
Chaque définition MIME contient une liste des ensembles de règles. Chaque ensemble de règles contient une liste hiérarchique de règles. Pseudocode de jeu de règles:
// 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
// ...Lorsque cet ensemble de règles est appliqué, le résultat sera calculé de la manière suivante:
// Result (boolean) = 0 && (1 || 2 || 3) && 4 && (5 || 6)...Exemple de règle:
"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 convertion du format d'origine (ancien) à JSON (nouveau) est prise en charge
MimeMagicSharp . MimeMagicSharp . ConvertFromOriginalToJson ( "magic_original" , "magic_json_convert_test" , out string ConvertError ) ; Seuls 4096 octets de fichier sont lus pendant la procédure de détection MIME. Vous pouvez facilement étendre cette limite dans le code source.
Construire vs 2017
Vous pouvez utiliser ou modifier les sources comme vous le souhaitez