Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menentukan jenis mime fail di .net, walaupun tanpa sambungan yang sah?
Artikel ini membentangkan penyelesaian yang mantap menggunakan kaedah
dari FindMimeFromData
. Kaedah ini menganalisis tandatangan fail (256 bait pertama) untuk menentukan jenis mime, memberikan hasil yang boleh dipercayai walaupun tanpa sambungan yang sah. urlmon.dll
urlmon.dll
Gunakan untuk mengimport dll yang diperlukan. System.Runtime.InteropServices
FindMimeFromData
Tentukan fungsi luaran . FindMimeFromData
FindMimeFromData
Penjagaan kaedah, lulus array byte. Cadangan Jenis MIME memastikan kaedah bergantung semata -mata pada tandatangan fail. null
Coretan kod yang lebih baik ini dengan cekap mengendalikan fail mana -mana saiz dan menyediakan jenis mime "tidak diketahui/tidak diketahui" lalai jika pengesanan gagal. Pendekatan ini memastikan pengenalan jenis mime yang boleh dipercayai, tanpa mengira kesahan sambungan fail.
<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>
Atas ialah kandungan terperinci Bagaimanakah saya boleh menentukan jenis mime fail di .net, walaupun tanpa sambungan yang sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!