Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menentukan jenis mime fail menggunakan tandatangannya dalam .net?

Bagaimana untuk menentukan jenis mime fail menggunakan tandatangannya dalam .net?

DDD
Lepaskan: 2025-01-31 15:01:09
asal
722 orang telah melayarinya

How to Determine a File's MIME Type Using its Signature in .NET?

Tentukan jenis mime

. NET Framework menyediakan kaedah tandatangan berasaskan fail dan bukannya memperluaskan jenis fail MIME Pengiktirafan nama. Ini amat berguna apabila memproses fail yang salah atau hilang.

Untuk menentukan jenis MIME, anda boleh menggunakan fungsi

yang dieksport. Fungsi ini menerima penampan byte tandatangan fail dan mengembalikan jenis mime. urlmon.dll FindMimeFromData Berikut adalah contoh cara menggunakan fungsi ini untuk menggunakan fungsi ini:

Kaedah ini menyediakan kaedah yang boleh dipercayai yang hanya boleh mendapatkan jenis mime berdasarkan tandatangan fail, tanpa mengira pelanjutan. Peningkatan kod adalah bahawa lebih tepat untuk mengendalikan bilangan bait yang dibaca untuk mengelakkan masalah potensi array menyeberangi sempadan.
using System.Runtime.InteropServices;
...

[DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
private 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 dwReserverd
);

public static string GetMimeFromFile(string filename)
{
    if (!File.Exists(filename))
        throw new FileNotFoundException($"{filename} not found");

    byte[] buffer = new byte[256];
    using (FileStream fs = new FileStream(filename, FileMode.Open))
    {
        int bytesRead = fs.Read(buffer, 0, 256); // Read at most 256 bytes
        if (bytesRead < 256)
        {
            Array.Resize(ref buffer, bytesRead); // Resize buffer if less than 256 bytes were read
        }
    }
    try
    {
        uint mimetype;
        FindMimeFromData(0, null, buffer, (uint)buffer.Length, null, 0, out mimetype, 0);
        IntPtr mimeTypePtr = new IntPtr(mimetype);
        string mime = Marshal.PtrToStringUni(mimeTypePtr);
        Marshal.FreeCoTaskMem(mimeTypePtr);
        return mime;
    }
    catch (Exception e)
    {
        return "unknown/unknown";
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk menentukan jenis mime fail menggunakan tandatangannya dalam .net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan