Mendeteksi tipe MIME berdasarkan konten file atau ekstensi file. Paket Nuget tersedia. File sampel disertakan.
Proyek ini awalnya didasarkan pada file parsing /usr/share/mime/ajaib (Kali Linux) ( MIME Database ). Lokasi mungkin berbeda. Informasi lebih lanjut tentang struktur file ini dapat ditemukan di sini (bagian "The Magic Files").
File ini berisi definisi tipe MIME dengan beberapa set aturan, yang diterapkan secara iteratif ke konten file yang diberikan untuk menebak tipe MIME.
Format file asli ( lama ) sulit dimodifikasi sesuai dengan kebutuhan Anda. Saya memutuskan untuk beralih ke format file JSON ( baru ) dengan kemampuan similary dan beberapa fitur baru. Format baru dapat dengan mudah dimodifikasi dan diperbarui dengan set aturan baru dan definisi tipe MIME.
Kedua format basis data didukung. Konversi dari yang lama ke format basis data baru didukung. Deteksi dengan ekstensi hanya dapat digunakan dengan format file baru. File asli template dan JSON akan segera disertakan.
Setiap definisi MIME berisi daftar set aturan. Setiap set aturan berisi daftar aturan hierarkis. Atur aturan 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
// ...Ketika aturan ini diterapkan, hasilnya akan dihitung dengan cara berikut:
// Result (boolean) = 0 && (1 || 2 || 3) && 4 && (5 || 6)...Contoh aturan:
"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
}
}Konvertion dari format asli (lama) ke JSON (baru) didukung
MimeMagicSharp . MimeMagicSharp . ConvertFromOriginalToJson ( "magic_original" , "magic_json_convert_test" , out string ConvertError ) ; Hanya 4096 byte file pertama yang dibaca selama prosedur deteksi MIME. Anda dapat memperluas batas ini dalam kode sumber dengan mudah.
Build in VS 2017
Anda dapat menggunakan atau memodifikasi sumber sesuka Anda