【问题标题】:how to get file extension (not from its name or from contentType)如何获取文件扩展名(不是来自其名称或来自 contentType)
【发布时间】:2014-11-10 19:19:10
【问题描述】:

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

     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 将变为文本。但我想知道它是一个exe。

有可能吗? 或者其他方式是安全的? (我认为没有)

【问题讨论】:

标签: c# asp.net file file-upload file-extension


【解决方案1】:

您要问的是基于签名的文件识别。这不能保证 100% 有效,但有一些实用程序可以帮助您。

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

File Identifier 是另一个。

如果您正在保存文件并希望阻止用户让您在系统上保存具有特定扩展名的文件,那么您当然可以使用 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...
}

【讨论】:

    【解决方案2】:

    如果用户在上传之前手动更改了文件,则无法确定文件的原始扩展名。但是,某些文件类型具有可用于终止文件类型的标题。示例可能是 office docs、pdfs... 在排除来自未知来源的任意文件时,您必须小心。扩展大部分是 Windows 功能,一些其他操作系统类型不使用或不依赖它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-14
      • 2016-02-19
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多