我一直试图让Mime类型形成文件,我真的不知道文件的文件类型。我知道有同样的问题 here
但这不完整,因为我必须支持.dwg(CAD文件) 它基本上与Solr搜索引擎一起使用。 所以寻找一种方法,我可以自动从文件流或签名中读取Mime类型。
答案 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