C# 文件Mime类型检查

C# 文件Mime类型检查,c#,asp.net-mvc,file-upload,mime-types,C#,Asp.net Mvc,File Upload,Mime Types,我允许将文件上传到我的C#MVC网站,目前我正在根据扩展名限制这些类型,但我也觉得我需要服务器端检查以确认他们没有重命名它 是否有一种技术可以用来检查我需要的所有类型,或者有一个库可以帮助我 我见过人们检查文件的前几个字节,但我担心我会错过什么 谢谢你的帮助 编辑: 有很多建议。我将研究其中一些作为解决方案。如果您将文件作为HttpPostedFile读取,则可以获得与mime类型相同的内容类型 因此,您可以执行以下操作: if (myFile.ContentType == "video/mpe

我允许将文件上传到我的C#MVC网站,目前我正在根据扩展名限制这些类型,但我也觉得我需要服务器端检查以确认他们没有重命名它

是否有一种技术可以用来检查我需要的所有类型,或者有一个库可以帮助我

我见过人们检查文件的前几个字节,但我担心我会错过什么

谢谢你的帮助

编辑:


有很多建议。我将研究其中一些作为解决方案。

如果您将文件作为HttpPostedFile读取,则可以获得与mime类型相同的内容类型

因此,您可以执行以下操作:

if (myFile.ContentType == "video/mpeg")
{
   // Do your thing
}
else{
   // error
}
尝试以下解决方案:


它将为您进行文件内容嗅探。

我最终混合了来自的一些解决方案,因为我没有使用HttpFileBase,只有文件流,我必须读取流的前几个字节来确定mime类型


注意:我不使用注册表技术,因为我不知道服务器上会安装什么或不会安装什么。

您可以通过以下方式获得MIME类型:

var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');

                mimeType = file.ContentType;

一旦获得MIME类型,就可以将其与字符串比较(如@FFFFFF 01所示)

为了更安全,您还可以使用FFFFFF 01所说的ContentType属性检查mimeType,并使用Path.GetExtension方法检查文件扩展名。

如果您只得到一堆字节,那么恐怕这会有点困难。如果您只处理图像,您可以始终检查特定的头。它将是图像类型以及其他mime类型,如doc、xls、pdf等。