【问题标题】:MP4 content type returned as different MIME type in different browsersMP4 内容类型在不同浏览器中返回为不同的 MIME 类型
【发布时间】:2011-10-06 11:35:58
【问题描述】:

我有一个使用 C# 构建的 ASP.NET 应用程序作为后端。我有一个上传 pdf 并检查 MIME 类型 application/pdf 的表单,以验证它是一个有效文件。我需要在 MP4 文件的单独表单上执行此操作,但它似乎不起作用。它总是返回假。我检查了 webkit 中返回的 MIME 类型 FileUpload.PostedFile.ContentType,它非常准确。然而,Firefox 5 和 IE 8 分别针对 text/csv 和 application/octet-stream 进行了测试。这对我来说完全没有意义。我还尝试将扩展名映射到 web.config 文件中正确的 MIME 类型,如下所示:

<staticContent>
  <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
  <mimeMap fileExtension=".m4v" mimeType="video/m4v" />
  <mimeMap fileExtension=".ogg" mimeType="video/ogg" />
  <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
  <mimeMap fileExtension=".webm" mimeType="video/webm" />
</staticContent>

在后端 CS 文件中,我使用它来测试发布文件的内容类型:

if (file.PostedFile.ContentType == "video/mp4" || 
    file.PostedFile.ContentType == "video/mpeg" || 
    file.PostedFile.ContentType == "video/ogg" || 
    file.PostedFile.ContentType == "video/quicktime" || 
    file.PostedFile.ContentType == "video/webm") 
        return true;
else
        return false;

另外请注意我使用的是VS自带的本地开发服务器

【问题讨论】:

    标签: c# asp.net mime-types content-type mime


    【解决方案1】:

    是客户端上的浏览器决定了发送到服务器的内容类型。那就是浏览器发送 ASP.NET 用来填充 HttpPostedFile.ContentType 属性的标头。

    您无法使用 IIS 静态内容 mime 映射来更改此设置,这些设置仅适用于服务器发送到客户端的文件(而不是相反)。

    您最好在发布 if-else 块之前在您的 c# 方法中使用一些自定义代码,以(尝试)确定真正的 mime使用服务器端检查输入。 看看这两种方法,它们会导致不同的结果和性能:

    1. Use reflection to call to a method in a internal .NET framework class(这只是将文件扩展名与框架本身已知的文件扩展名匹配)
    2. Use an un-managed call to a IE dll(这个方法应该会猜测在文件中寻找magic bytes的mime类型,as you can read in the MSDN documentation

    注意:一般来说,您应该始终检查/确定服务器上的内容类型,并且永远不要依赖客户端发送的内容类型(永远不要相信 HttpPostedFile.ContentType):它可能会意外出错(就像您发生的那样),由一些 hacky 用户故意更改,错误是因为浏览器不符合某些标准(已知 IE 会为某些图像格式发送错误的 mime 类型)...

    【讨论】:

    • 想发表评论以警告大家仔细检查 IIS(在根级别或站点实例)是否没有覆盖给定的 mime 类型。由于这个问题,正确编码的视频无法在 Safari 移动设备上播放,这是一个大问题!
    猜你喜欢
    • 2017-04-20
    • 2013-08-23
    • 1970-01-01
    • 2015-03-12
    • 2013-12-20
    • 2011-04-20
    • 2017-03-20
    • 2015-08-15
    • 2021-06-16
    相关资源
    最近更新 更多