如何获取文件扩展名(不是从文件名或contentType)



我只想知道发布的文件扩展名类型,

     public static void UploadFile(HttpPostedFile file)
    { 
        ....
        if (file != null && file.ContentLength > 0)
        {
            string fileName = file.FileName;
            string contentType = file.ContentType;
            file.SaveAs(path);
        }
    } 

上面的代码为我们提供了contentType

但是如果我们手动更改扩展名,例如,如果我将untitled.exe更改为untitled.txt,contentType将变为text。但我想知道它是一个exe。

有可能吗?或者另一条路是安全的?(我认为没有)

如果用户在上传之前手动更改了文件的原始扩展名,则无法确定该文件的扩展名。然而,有些文件类型的头可以用来终止它是什么类型的文件。例如,office文档、pdf。。。当从未知来源中排除任意文件时,您必须非常小心。扩展在很大程度上是Windows的一项功能,一些其他操作系统类型不使用或依赖它们。

您所询问的是基于文件签名的文件标识。这并不能100%保证有效,但有一些实用程序可以帮助您做到这一点。

例如,TrID有一个签名数据库,它可以尝试为您匹配文件,也可以选择重命名它。

文件标识符是另一个。

如果您正在保存文件,并且希望防止用户让您在系统上保存具有特定扩展名的文件,那么您当然可以使用FileInfo类检查扩展名。像这样的。。。

var invalidExtensions = new List<string>() { ".exe", ".dll" };
...
var fileInfo = new FileInfo(file.FileName);
if (invalidExtensions.Contains(fileInfo.Extension.ToLower()))
{
     // Do your cleanup on the filename because it's an extension you don't want
     //   to save...
}

相关内容

  • 没有找到相关文章

最新更新