Eine häufige Herausforderung in der .NET -Entwicklung beinhaltet die genaue Identifizierung des MIME -Typs einer Datei, insbesondere wenn es sich um Dateien handelt, die an ordnungsgemäßen Erweiterungen fehlen oder falsche haben. Dies entsteht oft mit Legacy -Systemen oder Rohdatenströmen.
Dieser Artikel enthält eine robuste Lösung unter Verwendung der FindMimeFromData
-Methode aus urlmon.dll
. Diese Methode analysiert die Signatur der Datei (die ersten 256 Bytes), um den MIME -Typ zu bestimmen, und liefert ein zuverlässiges Ergebnis auch ohne gültige Erweiterung.
Implementierungsschritte:
urlmon.dll
: Verwenden Sie System.Runtime.InteropServices
, um die erforderliche DLL zu importieren. FindMimeFromData
: Definieren Sie die externe Funktion FindMimeFromData
. FindMimeFromData
: auf die Methode auf und übergeben das Byte -Array. A null
MIME -MIME -Vorschlag stellt sicher, dass die Methode ausschließlich auf der Dateisignatur beruht. Code Beispiel:
<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>
Dieser verbesserte Code -Snippet verarbeitet effizient Dateien einer beliebigen Größe und liefert einen Standard -MIME -Typ "Unbekannt/unbekannt", wenn die Erkennung fehlschlägt. Dieser Ansatz sorgt für eine zuverlässige MIME -Identifizierung, unabhängig von der Gültigkeit der Dateierweiterung.
Das obige ist der detaillierte Inhalt vonWie kann ich den MIME -Typ einer Datei in .NET zuverlässig bestimmen, auch ohne gültige Erweiterung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!