从文件扩展名获取MIME类型

481

我怎样可以通过文件扩展名获取 MIME 类型?


16
我认为最好的选择是访问 http://msdn.microsoft.com/en-us/library/system.web.mimemapping.aspx。 - Yuki
3
@Yuki,感谢您添加了新的相关信息。不幸的是,微软的实现只有195个映射,无法添加更多,并且不可配置,该实现仅在.NET 4.5中可用。我的列表下面有560多个映射。奇怪的是,微软的列表甚至缺少一些非常常见的扩展名,例如.docx和.xlsx以及其他重要的Web扩展名,例如.csv、.swf和.air。 - Samuel Neff
提示:使用二进制分析来检测真实的文件格式,并确定MIME类型,不要仅依赖文件扩展名。 - Jeremy Thompson
30个回答

1

我对脚本进行了一些更新。以防万一有人需要。

function getMime(){
let ext = fileUpload.value.split('.')[1];
let myOutput = getMimeType(ext);
mimeType.value=myOutput;
}


function getMimeType(ext) {

    if (!ext.startsWith(".")) {
        ext = "." + ext;
    }
    let myList =
        [
            {"key": ".323", "value": "text/h323"},
            {"key": ".3g2", "value": "video/3gpp2"},
            {"key": ".3gp", "value": "video/3gpp"},
            {"key": ".3gp2", "value": "video/3gpp2"},
            {"key": ".3gpp", "value": "video/3gpp"},
            {"key": ".7z", "value": "application/x-7z-compressed"},
            {"key": ".aa", "value": "audio/audible"},
            {"key": ".AAC", "value": "audio/aac"},
            {"key": ".aaf", "value": "application/octet-stream"},
            {"key": ".aax", "value": "audio/vnd.audible.aax"},
            {"key": ".ac3", "value": "audio/ac3"},
            {"key": ".aca", "value": "application/octet-stream"},
            {"key": ".accda", "value": "application/msaccess.addin"},
            {"key": ".accdb", "value": "application/msaccess"},
            {"key": ".accdc", "value": "application/msaccess.cab"},
            {"key": ".accde", "value": "application/msaccess"},
            {"key": ".accdr", "value": "application/msaccess.runtime"},
            {"key": ".accdt", "value": "application/msaccess"},
            {"key": ".accdw", "value": "application/msaccess.webapplication"},
            {"key": ".accft", "value": "application/msaccess.ftemplate"},
            {"key": ".acx", "value": "application/internet-property-stream"},
            {"key": ".AddIn", "value": "text/xml"},
            {"key": ".ade", "value": "application/msaccess"},
            {"key": ".adobebridge", "value": "application/x-bridge-url"},
            {"key": ".adp", "value": "application/msaccess"},
            {"key": ".ADT", "value": "audio/vnd.dlna.adts"},
            {"key": ".ADTS", "value": "audio/aac"},
            {"key": ".afm", "value": "application/octet-stream"},
            {"key": ".ai", "value": "application/postscript"},
            {"key": ".aif", "value": "audio/x-aiff"},
            {"key": ".aifc", "value": "audio/aiff"},
            {"key": ".aiff", "value": "audio/aiff"},
            {"key": ".air", "value": "application/vnd.adobe.air-application-installer-package+zip"},
            {"key": ".amc", "value": "application/x-mpeg"},
            {"key": ".application", "value": "application/x-ms-application"},
            {"key": ".art", "value": "image/x-jg"},
            {"key": ".asa", "value": "application/xml"},
            {"key": ".asax", "value": "application/xml"},
            {"key": ".ascx", "value": "application/xml"},
            {"key": ".asd", "value": "application/octet-stream"},
            {"key": ".asf", "value": "video/x-ms-asf"},
            {"key": ".ashx", "value": "application/xml"},
            {"key": ".asi", "value": "application/octet-stream"},
            {"key": ".asm", "value": "text/plain"},
            {"key": ".asmx", "value": "application/xml"},
            {"key": ".aspx", "value": "application/xml"},
            {"key": ".asr", "value": "video/x-ms-asf"},
            {"key": ".asx", "value": "video/x-ms-asf"},
            {"key": ".atom", "value": "application/atom+xml"},
            {"key": ".au", "value": "audio/basic"},
            {"key": ".avi", "value": "video/x-msvideo"},
            {"key": ".axs", "value": "application/olescript"},
            {"key": ".bas", "value": "text/plain"},
            {"key": ".bcpio", "value": "application/x-bcpio"},
            {"key": ".bin", "value": "application/octet-stream"},
            {"key": ".bmp", "value": "image/bmp"},
            {"key": ".c", "value": "text/plain"},
            {"key": ".cab", "value": "application/octet-stream"},
            {"key": ".caf", "value": "audio/x-caf"},
            {"key": ".calx", "value": "application/vnd.ms-office.calx"},
            {"key": ".cat", "value": "application/vnd.ms-pki.seccat"},
            {"key": ".cc", "value": "text/plain"},
            {"key": ".cd", "value": "text/plain"},
            {"key": ".cdda", "value": "audio/aiff"},
            {"key": ".cdf", "value": "application/x-cdf"},
            {"key": ".cer", "value": "application/x-x509-ca-cert"},
            {"key": ".chm", "value": "application/octet-stream"},
            {"key": ".class", "value": "application/x-java-applet"},
            {"key": ".clp", "value": "application/x-msclip"},
            {"key": ".cmx", "value": "image/x-cmx"},
            {"key": ".cnf", "value": "text/plain"},
            {"key": ".cod", "value": "image/cis-cod"},
            {"key": ".config", "value": "application/xml"},
            {"key": ".contact", "value": "text/x-ms-contact"},
            {"key": ".coverage", "value": "application/xml"},
            {"key": ".cpio", "value": "application/x-cpio"},
            {"key": ".cpp", "value": "text/plain"},
            {"key": ".crd", "value": "application/x-mscardfile"},
            {"key": ".crl", "value": "application/pkix-crl"},
            {"key": ".crt", "value": "application/x-x509-ca-cert"},
            {"key": ".cs", "value": "text/plain"},
            {"key": ".csdproj", "value": "text/plain"},
            {"key": ".csh", "value": "application/x-csh"},
            {"key": ".csproj", "value": "text/plain"},
            {"key": ".css", "value": "text/css"},
            {"key": ".csv", "value": "text/csv"},
            {"key": ".cur", "value": "application/octet-stream"},
            {"key": ".cxx", "value": "text/plain"},
            {"key": ".dat", "value": "application/octet-stream"},
            {"key": ".datasource", "value": "application/xml"},
            {"key": ".dbproj", "value": "text/plain"},
            {"key": ".dcr", "value": "application/x-director"},
            {"key": ".def", "value": "text/plain"},
            {"key": ".deploy", "value": "application/octet-stream"},
            {"key": ".der", "value": "application/x-x509-ca-cert"},
            {"key": ".dgml", "value": "application/xml"},
            {"key": ".dib", "value": "image/bmp"},
            {"key": ".dif", "value": "video/x-dv"},
            {"key": ".dir", "value": "application/x-director"},
            {"key": ".disco", "value": "text/xml"},
            {"key": ".dll", "value": "application/x-msdownload"},
            {"key": ".dll.config", "value": "text/xml"},
            {"key": ".dlm", "value": "text/dlm"},
            {"key": ".doc", "value": "application/msword"},
            {"key": ".docm", "value": "application/vnd.ms-word.document.macroEnabled.12"},
            {"key": ".docx", "value": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
            {"key": ".dot", "value": "application/msword"},
            {"key": ".dotm", "value": "application/vnd.ms-word.template.macroEnabled.12"},
            {"key": ".dotx", "value": "application/vnd.openxmlformats-officedocument.wordprocessingml.template"},
            {"key": ".dsp", "value": "application/octet-stream"},
            {"key": ".dsw", "value": "text/plain"},
            {"key": ".dtd", "value": "text/xml"},
            {"key": ".dtsConfig", "value": "text/xml"},
            {"key": ".dv", "value": "video/x-dv"},
            {"key": ".dvi", "value": "application/x-dvi"},
            {"key": ".dwf", "value": "drawing/x-dwf"},
            {"key": ".dwp", "value": "application/octet-stream"},
            {"key": ".dxr", "value": "application/x-director"},
            {"key": ".eml", "value": "message/rfc822"},
            {"key": ".emz", "value": "application/octet-stream"},
            {"key": ".eot", "value": "application/octet-stream"},
            {"key": ".eps", "value": "application/postscript"},
            {"key": ".etl", "value": "application/etl"},
            {"key": ".etx", "value": "text/x-setext"},
            {"key": ".evy", "value": "application/envoy"},
            {"key": ".exe", "value": "application/octet-stream"},
            {"key": ".exe.config", "value": "text/xml"},
            {"key": ".fdf", "value": "application/vnd.fdf"},
            {"key": ".fif", "value": "application/fractals"},
            {"key": ".filters", "value": "Application/xml"},
            {"key": ".fla", "value": "application/octet-stream"},
            {"key": ".flr", "value": "x-world/x-vrml"},
            {"key": ".flv", "value": "video/x-flv"},
            {"key": ".fsscript", "value": "application/fsharp-script"},
            {"key": ".fsx", "value": "application/fsharp-script"},
            {"key": ".generictest", "value": "application/xml"},
            {"key": ".gif", "value": "image/gif"},
            {"key": ".group", "value": "text/x-ms-group"},
            {"key": ".gsm", "value": "audio/x-gsm"},
            {"key": ".gtar", "value": "application/x-gtar"},
            {"key": ".gz", "value": "application/x-gzip"},
            {"key": ".h", "value": "text/plain"},
            {"key": ".hdf", "value": "application/x-hdf"},
            {"key": ".hdml", "value": "text/x-hdml"},
            {"key": ".hhc", "value": "application/x-oleobject"},
            {"key": ".hhk", "value": "application/octet-stream"},
            {"key": ".hhp", "value": "application/octet-stream"},
            {"key": ".hlp", "value": "application/winhlp"},
            {"key": ".hpp", "value": "text/plain"},
            {"key": ".hqx", "value": "application/mac-binhex40"},
            {"key": ".hta", "value": "application/hta"},
            {"key": ".htc", "value": "text/x-component"},
            {"key": ".htm", "value": "text/html"},
            {"key": ".html", "value": "text/html"},
            {"key": ".htt", "value": "text/webviewhtml"},
            {"key": ".hxa", "value": "application/xml"},
            {"key": ".hxc", "value": "application/xml"},
            {"key": ".hxd", "value": "application/octet-stream"},
            {"key": ".hxe", "value": "application/xml"},
            {"key": ".hxf", "value": "application/xml"},
            {"key": ".hxh", "value": "application/octet-stream"},
            {"key": ".hxi", "value": "application/octet-stream"},
            {"key": ".hxk", "value": "application/xml"},
            {"key": ".hxq", "value": "application/octet-stream"},
            {"key": ".hxr", "value": "application/octet-stream"},
            {"key": ".hxs", "value": "application/octet-stream"},
            {"key": ".hxt", "value": "text/html"},
            {"key": ".hxv", "value": "application/xml"},
            {"key": ".hxw", "value": "application/octet-stream"},
            {"key": ".hxx", "value": "text/plain"},
            {"key": ".i", "value": "text/plain"},
            {"key": ".ico", "value": "image/x-icon"},
            {"key": ".ics", "value": "application/octet-stream"},
            {"key": ".idl", "value": "text/plain"},
            {"key": ".ief", "value": "image/ief"},
            {"key": ".iii", "value": "application/x-iphone"},
            {"key": ".inc", "value": "text/plain"},
            {"key": ".inf", "value": "application/octet-stream"},
            {"key": ".inl", "value": "text/plain"},
            {"key": ".ins", "value": "application/x-internet-signup"},
            {"key": ".ipa", "value": "application/x-itunes-ipa"},
            {"key": ".ipg", "value": "application/x-itunes-ipg"},
            {"key": ".ipproj", "value": "text/plain"},
            {"key": ".ipsw", "value": "application/x-itunes-ipsw"},
            {"key": ".iqy", "value": "text/x-ms-iqy"},
            {"key": ".isp", "value": "application/x-internet-signup"},
            {"key": ".ite", "value": "application/x-itunes-ite"},
            {"key": ".itlp", "value": "application/x-itunes-itlp"},
            {"key": ".itms", "value": "application/x-itunes-itms"},
            {"key": ".itpc", "value": "application/x-itunes-itpc"},
            {"key": ".IVF", "value": "video/x-ivf"},
            {"key": ".jar", "value": "application/java-archive"},
            {"key": ".java", "value": "application/octet-stream"},
            {"key": ".jck", "value": "application/liquidmotion"},
            {"key": ".jcz", "value": "application/liquidmotion"},
            {"key": ".jfif", "value": "image/pjpeg"},
            {"key": ".jnlp", "value": "application/x-java-jnlp-file"},
            {"key": ".jpb", "value": "application/octet-stream"},
            {"key": ".jpe", "value": "image/jpeg"},
            {"key": ".jpeg", "value": "image/jpeg"},
            {"key": ".jpg", "value": "image/jpeg"},
            {"key": ".js", "value": "application/x-javascript"},
            {"key": ".json", "value": "application/json"},
            {"key": ".jsx", "value": "text/jscript"},
            {"key": ".jsxbin", "value": "text/plain"},
            {"key": ".latex", "value": "application/x-latex"},
            {"key": ".library-ms", "value": "application/windows-library+xml"},
            {"key": ".lit", "value": "application/x-ms-reader"},
            {"key": ".loadtest", "value": "application/xml"},
            {"key": ".lpk", "value": "application/octet-stream"},
            {"key": ".lsf", "value": "video/x-la-asf"},
            {"key": ".lst", "value": "text/plain"},
            {"key": ".lsx", "value": "video/x-la-asf"},
            {"key": ".lzh", "value": "application/octet-stream"},
            {"key": ".m13", "value": "application/x-msmediaview"},
            {"key": ".m14", "value": "application/x-msmediaview"},
            {"key": ".m1v", "value": "video/mpeg"},
            {"key": ".m2t", "value": "video/vnd.dlna.mpeg-tts"},
            {"key": ".m2ts", "value": "video/vnd.dlna.mpeg-tts"},
            {"key": ".m2v", "value": "video/mpeg"},
            {"key": ".m3u", "value": "audio/x-mpegurl"},
            {"key": ".m3u8", "value": "audio/x-mpegurl"},
            {"key": ".m4a", "value": "audio/m4a"},
            {"key": ".m4b", "value": "audio/m4b"},
            {"key": ".m4p", "value": "audio/m4p"},
            {"key": ".m4r", "value": "audio/x-m4r"},
            {"key": ".m4v", "value": "video/x-m4v"},
            {"key": ".mac", "value": "image/x-macpaint"},
            {"key": ".mak", "value": "text/plain"},
            {"key": ".man", "value": "application/x-troff-man"},
            {"key": ".manifest", "value": "application/x-ms-manifest"},
            {"key": ".map", "value": "text/plain"},
            {"key": ".master", "value": "application/xml"},
            {"key": ".mda", "value": "application/msaccess"},
            {"key": ".mdb", "value": "application/x-msaccess"},
            {"key": ".mde", "value": "application/msaccess"},
            {"key": ".mdp", "value": "application/octet-stream"},
            {"key": ".me", "value": "application/x-troff-me"},
            {"key": ".mfp", "value": "application/x-shockwave-flash"},
            {"key": ".mht", "value": "message/rfc822"},
            {"key": ".mhtml", "value": "message/rfc822"},
            {"key": ".mid", "value": "audio/mid"},
            {"key": ".midi", "value": "audio/mid"},
            {"key": ".mix", "value": "application/octet-stream"},
            {"key": ".mk", "value": "text/plain"},
            {"key": ".mmf", "value": "application/x-smaf"},
            {"key": ".mno", "value": "text/xml"},
            {"key": ".mny", "value": "application/x-msmoney"},
            {"key": ".mod", "value": "video/mpeg"},
            {"key": ".mov", "value": "video/quicktime"},
            {"key": ".movie", "value": "video/x-sgi-movie"},
            {"key": ".mp2", "value": "video/mpeg"},
            {"key": ".mp2v", "value": "video/mpeg"},
            {"key": ".mp3", "value": "audio/mpeg"},
            {"key": ".mp4", "value": "video/mp4"},
            {"key": ".mp4v", "value": "video/mp4"},
            {"key": ".mpa", "value": "video/mpeg"},
            {"key": ".mpe", "value": "video/mpeg"},
            {"key": ".mpeg", "value": "video/mpeg"},
            {"key": ".mpf", "value": "application/vnd.ms-mediapackage"},
            {"key": ".mpg", "value": "video/mpeg"},
            {"key": ".mpp", "value": "application/vnd.ms-project"},
            {"key": ".mpv2", "value": "video/mpeg"},
            {"key": ".mqv", "value": "video/quicktime"},
            {"key": ".ms", "value": "application/x-troff-ms"},
            {"key": ".msi", "value": "application/octet-stream"},
            {"key": ".mso", "value": "application/octet-stream"},
            {"key": ".mts", "value": "video/vnd.dlna.mpeg-tts"},
            {"key": ".mtx", "value": "application/xml"},
            {"key": ".mvb", "value": "application/x-msmediaview"},
            {"key": ".mvc", "value": "application/x-miva-compiled"},
            {"key": ".mxp", "value": "application/x-mmxp"},
            {"key": ".nc", "value": "application/x-netcdf"},
            {"key": ".nsc", "value": "video/x-ms-asf"},
            {"key": ".nws", "value": "message/rfc822"},
            {"key": ".ocx", "value": "application/octet-stream"},
            {"key": ".oda", "value": "application/oda"},
            {"key": ".odc", "value": "text/x-ms-odc"},
            {"key": ".odh", "value": "text/plain"},
            {"key": ".odl", "value": "text/plain"},
            {"key": ".odp", "value": "application/vnd.oasis.opendocument.presentation"},
            {"key": ".ods", "value": "application/oleobject"},
            {"key": ".odt", "value": "application/vnd.oasis.opendocument.text"},
            {"key": ".webtest", "value": "application/xml"},
            {"key": ".wiq", "value": "application/xml"},
            {"key": ".wiz", "value": "application/msword"},
            {"key": ".wks", "value": "application/vnd.ms-works"},
            {"key": ".WLMP", "value": "application/wlmoviemaker"},
            {"key": ".wlpginstall", "value": "application/x-wlpg-detect"},
            {"key": ".wlpginstall3", "value": "application/x-wlpg3-detect"},
            {"key": ".wm", "value": "video/x-ms-wm"},
            {"key": ".wma", "value": "audio/x-ms-wma"},
            {"key": ".wmd", "value": "application/x-ms-wmd"},
            {"key": ".wmf", "value": "application/x-msmetafile"},
            {"key": ".wml", "value": "text/vnd.wap.wml"},
            {"key": ".wmlc", "value": "application/vnd.wap.wmlc"},
            {"key": ".wmls", "value": "text/vnd.wap.wmlscript"},
            {"key": ".wmlsc", "value": "application/vnd.wap.wmlscriptc"},
            {"key": ".wmp", "value": "video/x-ms-wmp"},
            {"key": ".wmv", "value": "video/x-ms-wmv"},
            {"key": ".wmx", "value": "video/x-ms-wmx"},
            {"key": ".wmz", "value": "application/x-ms-wmz"},
            {"key": ".wpl", "value": "application/vnd.ms-wpl"},
            {"key": ".wps", "value": "application/vnd.ms-works"},
            {"key": ".wri", "value": "application/x-mswrite"},
            {"key": ".wrl", "value": "x-world/x-vrml"},
            {"key": ".wrz", "value": "x-world/x-vrml"},
            {"key": ".wsc", "value": "text/scriptlet"},
            {"key": ".wsdl", "value": "text/xml"},
            {"key": ".wvx", "value": "video/x-ms-wvx"},
            {"key": ".x", "value": "application/directx"},
            {"key": ".xaf", "value": "x-world/x-vrml"},
            {"key": ".xaml", "value": "application/xaml+xml"},
            {"key": ".xap", "value": "application/x-silverlight-app"},
            {"key": ".xbap", "value": "application/x-ms-xbap"},
            {"key": ".xbm", "value": "image/x-xbitmap"},
            {"key": ".xdr", "value": "text/plain"},
            {"key": ".xht", "value": "application/xhtml+xml"},
            {"key": ".xhtml", "value": "application/xhtml+xml"},
            {"key": ".xla", "value": "application/vnd.ms-excel"},
            {"key": ".xlam", "value": "application/vnd.ms-excel.addin.macroEnabled.12"},
            {"key": ".xlc", "value": "application/vnd.ms-excel"},
            {"key": ".xld", "value": "application/vnd.ms-excel"},
            {"key": ".xlk", "value": "application/vnd.ms-excel"},
            {"key": ".xll", "value": "application/vnd.ms-excel"},
            {"key": ".xlm", "value": "application/vnd.ms-excel"},
            {"key": ".xls", "value": "application/vnd.ms-excel"},
            {"key": ".xlsb", "value": "application/vnd.ms-excel.sheet.binary.macroEnabled.12"},
            {"key": ".xlsm", "value": "application/vnd.ms-excel.sheet.macroEnabled.12"},
            {"key": ".xlsx", "value": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
            {"key": ".xlt", "value": "application/vnd.ms-excel"},
            {"key": ".xltm", "value": "application/vnd.ms-excel.template.macroEnabled.12"},
            {"key": ".xltx", "value": "application/vnd.openxmlformats-officedocument.spreadsheetml.template"},
            {"key": ".xlw", "value": "application/vnd.ms-excel"},
            {"key": ".xml", "value": "text/xml"},
            {"key": ".xmta", "value": "application/xml"},
            {"key": ".xof", "value": "x-world/x-vrml"},
            {"key": ".XOML", "value": "text/plain"},
            {"key": ".xpm", "value": "image/x-xpixmap"},
            {"key": ".xps", "value": "application/vnd.ms-xpsdocument"},
            {"key": ".xrm-ms", "value": "text/xml"},
            {"key": ".xsc", "value": "application/xml"},
            {"key": ".xsd", "value": "text/xml"},
            {"key": ".xsf", "value": "text/xml"},
            {"key": ".xsl", "value": "text/xml"},
            {"key": ".xslt", "value": "text/xml"},
            {"key": ".xsn", "value": "application/octet-stream"},
            {"key": ".xss", "value": "application/xml"},
            {"key": ".xtp", "value": "application/octet-stream"},
            {"key": ".xwd", "value": "image/x-xwindowdump"},
            {"key": ".z", "value": "application/x-compress"},
            {"key": ".zip", "value": "application/x-zip-compressed"}
        ]
    let index = myList.map((o) => o.key).indexOf(ext);
    let mime = myList[index]["value"];
    return mime

}
<p><input id='fileUpload' type='file' name='fileUpload' onChange='getMime()'></p>
<p>MimeType: <input id='mimeType' type='text' name='mimeType'></p>


完整的数组列表可以在此处找到:https://jsfiddle.net/smule/7b5pwL3j/1/#&togetherjs=SvdOqdoa8C - sospeter mule

0

如果您不想添加附加依赖项但仍希望具有版本无关的请求,则可以将此答案中如何在不同.NET版本中获取MIME类型此答案中多个.NET Framework版本的条件构建混合使用。

我做的第一件事是编辑我的项目文件。在最后一个构建定义之后,我按照第二个答案中所述添加了属性组:

<PropertyGroup>
    <DefineConstants Condition=" !$(DefineConstants.Contains(';NET')) ">$(DefineConstants);$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", ""))</DefineConstants>
    <DefineConstants Condition=" $(DefineConstants.Contains(';NET')) ">$(DefineConstants.Remove($(DefineConstants.LastIndexOf(";NET"))));$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", ""))</DefineConstants>
</PropertyGroup>

现在我提供了一个不同的实现方式来自第一个答案中的 MimeExtensionHelper,另外还加入了一个针对所有 .NET 4.5 或更高版本客户端简单调用 System.Web.MimeMapping.GetMimeMapping 的实现方式:
#if (NET10 || NET11 || NET20 || NET30 || NET35)
public static class MimeExtensionHelper
{
    static object locker = new object();
    static MethodInfo getMimeMappingMethodInfo;

    static MimeExtensionHelper()
    {
        Type mimeMappingType = Assembly.GetAssembly(typeof(HttpRuntime)).GetType("System.Web.MimeMapping");

        if (mimeMappingType == null)
            throw new SystemException("Couldnt find MimeMapping type");

        ConstructorInfo constructorInfo = mimeMappingType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);

        if (constructorInfo == null)
            throw new SystemException("Couldnt find default constructor for MimeMapping");

        mimeMapping = constructorInfo.Invoke(null);

        if (mimeMapping == null)
            throw new SystemException("Couldnt find MimeMapping");

        getMimeMappingMethodInfo = mimeMappingType.GetMethod("GetMimeMapping", BindingFlags.Static | BindingFlags.NonPublic);

        if (getMimeMappingMethodInfo == null)
            throw new SystemException("Couldnt find GetMimeMapping method");

        if (getMimeMappingMethodInfo.ReturnType != typeof(string))
            throw new SystemException("GetMimeMapping method has invalid return type");

        if (getMimeMappingMethodInfo.GetParameters().Length != 1 && getMimeMappingMethodInfo.GetParameters()[0].ParameterType != typeof(string))
            throw new SystemException("GetMimeMapping method has invalid parameters");
    }

    public static string GetMimeType(string fileName)
    {
        lock (locker)
        {
            return (string)getMimeMappingMethodInfo.Invoke(null, new object[] { fileName });
        }
    }
}
#elif NET40
public static class MimeExtensionHelper
{
    static object locker = new object();
    static MethodInfo getMimeMappingMethodInfo;

    static MimeExtensionHelper()
    {
        Type mimeMappingType = Assembly.GetAssembly(typeof(HttpRuntime)).GetType("System.Web.MimeMapping");

        if (mimeMappingType == null)
            throw new SystemException("Couldnt find MimeMapping type");           

        getMimeMappingMethodInfo = mimeMappingType.GetMethod("GetMimeMapping", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);

        if (getMimeMappingMethodInfo == null)
            throw new SystemException("Couldnt find GetMimeMapping method");

        if (getMimeMappingMethodInfo.ReturnType != typeof(string))
            throw new SystemException("GetMimeMapping method has invalid return type");

        if (getMimeMappingMethodInfo.GetParameters().Length != 1 && getMimeMappingMethodInfo.GetParameters()[0].ParameterType != typeof(string))
            throw new SystemException("GetMimeMapping method has invalid parameters");
    }

    public static string GetMimeType(string fileName)
    {
        lock (locker)
        {
            return (string)getMimeMappingMethodInfo.Invoke(null, new object[] { fileName });
        }
    }
}
#else // .NET 4.5 or later
public static class MimeExtensionHelper
{
    public static string GetMimeType(string fileName)
    {
        return MimeMapping.GetMimeMapping(fileName);
    }
}
#endif

在.NET 4.5之前的版本中,静态MimeMapping类托管了一个名为_mappingDictionary(类型为MimeMapping.MimeMappingDictionaryBase)的静态实例,您可以通过反射来请求该实例,以添加尚未支持的新MIME类型。


0

文件扩展名计算出的MIME类型并不总是正确的。

比如说,我可以将一个文件保存为.png格式,但实际上它的文件格式可能是"ImageFormat.jpeg"。

因此,在这种情况下,你所计算出来的文件大小会与原始文件不同... 可能会变成更大的文件。

如果你正在处理图像,则可以使用imagecodecInfo和ImageFormat。


0

我已经编制了一个声誉良好的来源列表,用于基于文件扩展名(目前)的mime类型和内容类型值。

nuget包在这里 https://www.nuget.org/packages/FTTLib.dll/

源代码在这里 https://github.com/brondavies/filetypetranslator/

此库的设计目标是:

  • 没有外部依赖
  • 没有文件系统访问
  • 小内存占用
  • 简单静态方法(无扩展方法和无可实例化类)
  • 不区分大小写
  • 可移植 - 适用于针对任何CLR(.NET 2.0+)的应用程序

0

如果有人能在Linux上使用类似于libmagic的功能,那将是检测文件类型比依赖文件扩展名更好的方法。

例如,如果我将文件从mypicture.jpg重命名为mypicture.txt,在Linux上,它仍将报告为图片,但在这里使用此方法,它将被报告为文本文件。

敬礼,Tomas


0

IANA 媒体类型

我希望微软能够整合他们的行业标准!对于其他人,有兴趣的:

离散类型

多部分类型

我想向那些感兴趣的人推荐阅读Mozilla页面上的MIME类型(IANA媒体类型)。它非常有启发性!

在代码方面,上述每个链接都有一个.csv文件下载:https://www.iana.org/assignments/media-types/application.csv

正如在这里已经指出的那样,字典或ConcurrentDictionary可能是下载和填充键值对字典的一个好主意。


0
Bryan Denny 的上面的帖子对我不起作用,因为并非所有扩展都在注册表中有“Content Type”子键。 我必须按照以下方式调整代码:
private string GetMimeType(string sFileName)
{
  // Get file extension and if it is empty, return unknown
  string sExt = Path.GetExtension(sFileName);
  if (string.IsNullOrEmpty(sExt)) return "Unknown file type";

  // Default type is "EXT File"
  string mimeType = string.Format("{0} File", sExt.ToUpper().Replace(".", ""));

  // Open the registry key for the extension under HKEY_CLASSES_ROOT and return default if it doesn't exist
  Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(sExt);
  if (regKey == null) return mimeType;

  // Get the "(Default)" value and re-open the key for that value
  string sSubType = regKey.GetValue("").ToString();
  regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(sSubType);

  // If it exists, get the "(Default)" value of the new key
  if (regKey?.GetValue("") != null) mimeType = regKey.GetValue("").ToString();

  // Return the value
  return mimeType;
}

现在对于所有已注册的文件类型和未注册或通用文件类型(如JPG等),它对我来说都运行良好。


-1

当然,为了将通用的完整性、动态性和可移植性与最小依赖相结合

您可以将Samuel Neff的静态字典与平台特定的查询结合起来,例如Bryan Denny所做的那样。

例如,在Linux命令行工具“xdg-mime”下可能会执行后半部分。


-2

FileExtension 处理文件扩展名而不是 Mime。用户可以更改文件扩展名,因此请检查 Mime。代码示例通过文件扩展名关联 Mime,这是错误的且无法正常工作。

需要获取 contenttype 文件并检查表格 Mime contetType 是否与文件扩展名相符。现在,如何获取文件的 ContentType

使用 FileUpload 如下:FileUpload.PostedFile.ContentType; 现在,如果我已经有了文件,如何获取它的 ContentType?


-8
你可以使用MimeMappings类。我认为这是最简单的方法。我也提供了MimeMappings的导入,因为我发现找到这些类的导入很麻烦。
import org.springframework.boot.web.server.MimeMappings;    
MimeMappings mm=new MimeMappings();
String mimetype = mm.get(fileExtension);
System.out.println(mimetype);

3
这不是 C#。 - khalil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接