从C#中未知文件类型的文件中获取Mime类型

时间:2014-08-23 15:15:15

标签: c# .net mime-types solrnet

我一直试图让Mime类型形成文件,我真的不知道文件的文件类型。我知道有同样的问题 here

但这不完整,因为我必须支持.dwg(CAD文件) 它基本上与Solr搜索引擎一起使用。 所以寻找一种方法,我可以自动从文件流或签名中读取Mime类型。

3 个答案:

答案 0 :(得分:1)

.NET使用了一种非公开的方法来实现这一目标。我设计了一种方法来窃取功能并将其公之于众:

/// <summary>
/// Exposes the Mime Mapping method that Microsoft hid from us.
/// </summary>
public static class MimeMappingStealer
{
    // The get mime mapping method
    private static readonly Func<string, string> _getMimeMappingMethod = null;

    /// <summary>
    /// Static constructor sets up reflection.
    /// </summary>
    static MimeMappingStealer()
    {
        // Load hidden mime mapping class and method from System.Web
        var assembly = Assembly.GetAssembly(typeof(HttpApplication));
        Type mimeMappingType = assembly.GetType("System.Web.MimeMapping");
        _getMimeMappingMethod = (Func<string, string>)Delegate.CreateDelegate(typeof(Func<string, string>), mimeMappingType.GetMethod("GetMimeMapping", 
            BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public |
            BindingFlags.NonPublic | BindingFlags.FlattenHierarchy));
    }

    /// <summary>
    /// Exposes the hidden Mime mapping method.
    /// </summary>
    /// <param name="fileName">The file name.</param>
    /// <returns>The mime mapping.</returns>
    public static string GetMimeMapping(string fileName)
    {
        return _getMimeMappingMethod(fileName);
    }
}

使用:

var fileName1 = "whatever.js";
var fileName2 = "somefile.css";
var fileName3 = "myfile.html";

MimeMappingStealer.GetMimeMapping(fileName1) // application/x-javascript    
MimeMappingStealer.GetMimeMapping(fileName2) // text/css
MimeMappingStealer.GetMimeMapping(fileName3) // text/html

我的博客中的代码:http://www.haneycodes.net/a-better-mime-mapping-stealer/

答案 1 :(得分:0)

您可以使用Path.GetExtension(“strfilename.dwg”)在System.IO命名空间中查看Path类 并且您将获得扩展名.dwg ...以确保您可以制作.ToLower()并将其与“.dwg”进行比较并继续处理。

如果你正在使用FileUpload控件是asp.net,有一种方法可以使用FileUpload1.PostedFile.ContentType找出mime类型。其中FileUpload1是控件的名称,PostedFile和ContentType是Properties,ContentType表示Mime类型。

检查msdn上的FileUpload控件以获取更多信息。

答案 2 :(得分:0)

System.Web.MimeMapping对于没有扩展名的文件将不起作用。它将默认为application / octet-stream