簡體   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