5

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

有没有一种技术可以用来检查我需要的所有类型,或者我可以使用的库可以在这里提供帮助?

我见过有人检查文件的前几个字节,但我害怕我会错过什么?

谢谢你的帮助。

编辑:

这里有很多建议。我将调查其中一些作为解决方案。

4

5 回答 5

2

如果您将文件作为 HttpPostedFile 读取,则可以获得等于 mime 类型的内容类型。

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

if (myFile.ContentType == "video/mpeg")
{
   // Do your thing
}
else{
   // error
}
于 2012-09-02T10:31:44.480 回答
0

试试这个解决方案:使用 .NET,如何根据文件签名而不是扩展名找到文件的 mime 类型

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

于 2012-09-02T10:39:30.663 回答
0

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

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

于 2012-09-02T23:10:27.447 回答
0

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

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

                mimeType = file.ContentType;

一旦获得 MIME 类型,就可以与字符串比较进行比较(如 @ffffff01 所示)

于 2019-07-31T07:26:01.123 回答
0

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

于 2019-07-31T07:32:03.540 回答