Maison >développement back-end >C++ >Comment puis-je déterminer le type MIME d'un fichier à l'aide de signatures de fichiers dans .NET?

Comment puis-je déterminer le type MIME d'un fichier à l'aide de signatures de fichiers dans .NET?

Susan Sarandon
Susan Sarandonoriginal
2025-01-31 14:56:13471parcourir

How Can I Determine a File's MIME Type Using File Signatures in .NET?

La signature du fichier dans le .NET a déterminé le type de mime de fichier

Le type MIME de fichiers d'identification avec précision est essentiel pour le traitement et le fonctionnement corrects. Lorsque l'extension de fichier est manquante ou incorrecte, la signature du fichier doit s'appuyer sur le type de fichier pour déterminer avec précision le type de fichier. Cet article examine comment atteindre cette fonction dans le .NET.

Solution utilisant Urlmon.dll

La solution fournie à l'aide de la bibliothèque urlmon.dll pour extraire le type MIME en fonction de la signature de fichier. Cette méthode peut être implémentée via les étapes suivantes:

Introduire l'ensemble d'assemblage nécessaire:
  1. Définissez la fonction FindmimeFromData:
    <code class="language-csharp">using System.Runtime.InteropServices;</code>
  2. Créez une fonction qui recherche le type MIME à partir du fichier:

    <code class="language-csharp">[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
    );</code>
  3. Utilisez la fonction GetMimeFromFile pour obtenir le type de mime:

    <code class="language-csharp">public static string GetMimeFromFile(string filename)
    {
        // 为简洁起见,省略文件验证
        byte[] buffer = new byte[256];
        //...
    
        try
        {
            uint mimetype;
            FindMimeFromData(0, null, buffer, 256, 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";
        }
    }</code>
  4. Veuillez noter que certains code sont omis dans les fragments de code ci-dessus, tels que les 256 premiers octets de lecture du fichier dans le tableau . L'implémentation complète nécessite le traitement des erreurs et la logique de lecture des fichiers nécessaires. De plus, l'utilisation de la méthode peut dépendre du système d'exploitation et des problèmes de compatibilité peuvent exister dans différents environnements. Des solutions plus stables peuvent devoir envisager d'utiliser d'autres bibliothèques .NET ou implémenter une analyse de signature de fichiers par elles-mêmes.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn