Maison >développement back-end >C++ >Comment puis-je déterminer de manière fiable le type de mime d'un fichier dans .NET, même sans extension valide?
Un défi commun dans le développement .NET consiste à identifier avec précision le type de mime d'un fichier, en particulier lorsqu'il s'agit de fichiers manquant d'extensions appropriées ou d'avoir des extensions incorrectes. Cela se produit souvent avec des systèmes hérités ou des flux de données bruts.
Cet article présente une solution robuste en utilisant la méthode FindMimeFromData
de urlmon.dll
. Cette méthode analyse la signature du fichier (les 256 premiers octets) pour déterminer son type de mime, fournissant un résultat fiable même sans extension valide.
Étapes d'implémentation:
urlmon.dll
: Utiliser System.Runtime.InteropServices
pour importer la dll nécessaire. FindMimeFromData
: Définissez la fonction externe FindMimeFromData
. FindMimeFromData
: Invoquez la méthode, passant le tableau d'octets. Une proposition de type MIME null
MIME garantit que la méthode repose uniquement sur la signature du fichier. Exemple de code:
<code class="language-csharp">using System.Runtime.InteropServices; using System.IO; [DllImport("urlmon.dll", CharSet = CharSet.Auto)] static extern uint FindMimeFromData(uint pBC, [MarshalAs(UnmanagedType.LPStr)] string pwzUrl, [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer, uint cbSize, [MarshalAs(UnmanagedType.LPStr)] string pwzMimeProposed, uint dwMimeFlags, out uint ppwzMimeOut, uint dwReserved); public static string GetMimeType(string filePath) { if (!File.Exists(filePath)) throw new FileNotFoundException($"File not found: {filePath}"); byte[] buffer = new byte[256]; using (FileStream fs = new FileStream(filePath, FileMode.Open)) { int bytesRead = fs.Read(buffer, 0, Math.Min(256, (int)fs.Length)); //Handle files < 256 bytes } uint mimeTypePtr; FindMimeFromData(0, null, buffer, (uint)buffer.Length, null, 0, out mimeTypePtr, 0); IntPtr ptr = new IntPtr(mimeTypePtr); string mimeType = Marshal.PtrToStringUni(ptr); Marshal.FreeCoTaskMem(ptr); return mimeType ?? "unknown/unknown"; //Handle potential null return }</code>
Cet extrait de code amélioré gère efficacement les fichiers de n'importe quelle taille et fournit un type de mime "inconnu / inconnu" par défaut si la détection échoue. Cette approche garantit une identification fiable de type mime, quelle que soit la validité d'extension du fichier.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!