我允许将文件上传到我的C#MVC网站,我现在基于扩展限制这些类型,但我也觉得我需要进行服务器端检查以确认它们还没有重命名。
是否有一种技术可用于检查我需要的所有类型或我可以使用的库,这对我们有帮助?
我看到人们检查文件的前几个字节,但我很害怕我会错过什么?
感谢您的帮助。
编辑:
有很多建议here。我将调查其中一些作为解决方案。
答案 0 :(得分:2)
如果您将文件作为HttpPostedFile读取,则可以获得等于mime类型的内容类型。
那么你可以做到以下几点:
if (myFile.ContentType == "video/mpeg")
{
// Do your thing
}
else{
// error
}
答案 1 :(得分:0)
尝试此解决方案:Using .NET, how can you find the mime type of a file based on the file signature not the extension
它会为你嗅探文件内容。
答案 2 :(得分:0)
我最终混合了here的一些解决方案,因为我没有使用HttpFileBase并且只有文件流,我必须读取流的前几个字节来确定mime类型。
注意:我不使用注册表技术,因为我不知道服务器上会安装什么或不安装什么。
答案 3 :(得分:0)
您可以通过以下方式获取MIME类型:
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
mimeType = file.ContentType;
一旦获得MIME类型,就可以与字符串比较(如@ ffffff01所示)进行比较
答案 4 :(得分:0)
为了更加安全,您还可以同时使用ffffff01所述的带有 ContentType 属性的mimeType和带有 Path.GetExtension 方法的文件扩展名。