哑剧类型胡言乱语
Posted
技术标签:
【中文标题】哑剧类型胡言乱语【英文标题】:Mime Type Gibberish 【发布时间】:2012-09-11 01:36:52 【问题描述】:为什么同一个文件扩展名有这么多 mime 类型?一个人应该如何仅根据扩展名来确定文件的 mime 类型,例如,如果有多种 mime 类型与此扩展名相关联?
Example:
.mp3 audio/mpeg3
.mp3 audio/x-mpeg-3
.mp3 video/mpeg
.mp3 video/x-mpeg
应该如何知道默认的 mime 类型? x-
表示什么?这是 mime 类型的 linux/unix 风格吗?为什么这些都没有(还)标准化?
来源取自:Sitepoint 但是还有多个其他列表也生产类似的意大利面。
编辑:
我要求 ASP.NET 页面应提供指向 IIS 外部源目录中的一些文件的链接。在 Windows 服务器中。我不知道这些文件是什么,但我知道我无法提供文件的完整路径,因为这可能是一个安全问题。
我正在使用类似这样的代码:
Response.ContentType = "image/jpeg";
Response.AppendHeader("Content-Disposition","attachment; filename=SailBig.jpg");
Response.TransmitFile( '[path to file]' );
Response.End();
我将 ContentType 属性替换为实际文件的 mime 类型。
【问题讨论】:
MPEG3 可以是纯音频或视频(可能是视频或音频+视频)。 “x-”前缀通常表示 MIME 类型的未批准(由标准委员会)值。实验性的,当标头以 X- 为前缀表示非规范时,可能具有 RFC850 的传统。 延伸阅读iana.org/assignments/media-types/index.html 帮助阅读理解;官方 IANA 文档不包括官方 MIME 类型中的audio/mpeg3
。 audio/mpeg
在 RFC 3003 中被列为适用于 .mp3
(以及 .mp1
和 .mp2
)文件扩展名。rfc-editor.org/rfc/rfc3003.txt 对于 MP3 视频,video/mpeg
似乎合适;它一直追溯到 RFC 2046。rfc-editor.org/rfc/rfc2046.txt
不,不应该仅根据扩展名来确定文件类型。各种多媒体容器格式,例如.mp3
可以容纳各种类型的流,您必须检查文件以找出它们是什么类型的流。如果您的 Web 服务器无法执行此操作,或者您不想这样做,则必须对文件进行预处理并明确地重命名它们,以便 Web 服务器可以从文件扩展名映射到正确的 MIME 类型,但是当然,这有一些不良后果。
【参考方案1】:
如果您使用的是 Framework 4.5,您可以使用以下方法获取 mimemapping:
var mapping = System.Web.MimeMapping.GetMimeMapping("something.jpg");
如果您使用的是 Framework 4,您可以访问非公共方法来执行相同的操作:
var assembly = Assembly.Load("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
var assemblyType = assembly.GetType("System.Web.MimeMapping");
var getMimeMappingMethod = assemblyType.GetMethod("GetMimeMapping", BindingFlags.Static | BindingFlags.NonPublic) ??
assemblyType.GetMethod("GetMimeMapping", BindingFlags.Static | BindingFlags.Public);
var mapping = (string)getMimeMappingMethod.Invoke(null, new object[] fileName );
【讨论】:
以上是关于哑剧类型胡言乱语的主要内容,如果未能解决你的问题,请参考以下文章