繁体   English   中英

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

[英]how to get file extension (not from its name or from 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变为文本。 但我想知道这是一个exe。

可能吗? 还是另一种方法是安全的? (我觉得不行)

您要问的是基于文件签名的文件标识。 这不是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...
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM