繁体   English   中英

MP4 内容类型在不同浏览器中返回为不同的 MIME 类型

[英]MP4 content type returned as different MIME type in different browsers

我有一个使用 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 自带的本地开发服务器

确定发送到服务器的内容类型的是客户端的浏览器 也就是说,浏览器发送 ASP.NET 用来填充 HttpPostedFile.ContentType 属性的 header。

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

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

  1. 使用反射调用内部.NET 框架 class 中的方法(这只是将文件扩展名与框架本身已知的文件扩展名匹配)
  2. 使用对 IE dll 的非托管调用(此方法应该猜测 mime 类型,在文件中查找魔术字节如您可以在 MSDN 文档中阅读的那样

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM