[筆記] C# 如何獲取文件的 MIME Type


MIME Type 為何物:
MIME 參考手冊
svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

常規方式

對於有文件后綴名的,可以使用 MimeMapping.GetMimeMapping 獲取。

MimeMapping.GetMimeMapping(String) Method (System.Web) | Microsoft Docs

如果 MimeMapping.GetMimeMapping 不認識的,會返回 application/octet-stream 這個默認值。

其它方式

對於特定的類型的文件,可以使用與之相關的其它方式獲取,如 Image ,可以這樣獲取:

public bool TryBuildFileMimeType(string filePath, out string mimeType)
{
    if (string.IsNullOrWhiteSpace(filePath) || !System.IO.File.Exists(filePath))
    {
        mimeType = string.Empty;
        return false;
    }
    try
    {
        var image = Image.FromFile(filePath);
        mimeType = GetMimeTypeFromImage(image);
        return !string.IsNullOrWhiteSpace(mimeType);
    }
    catch (Exception ex)
    {
        mimeType = string.Empty;
        return false;
    }
}

private string GetMimeTypeFromImage(Image image)
{
    if (image.RawFormat.Equals(ImageFormat.Jpeg))
        return "image/jpeg";
    else if (image.RawFormat.Equals(ImageFormat.Bmp))
        return "image/bmp";
    else if (image.RawFormat.Equals(ImageFormat.Emf))
        return "image/emf";
    else if (image.RawFormat.Equals(ImageFormat.Exif))
        return "image/exif";
    else if (image.RawFormat.Equals(ImageFormat.Gif))
        return "image/gif";
    else if (image.RawFormat.Equals(ImageFormat.Icon))
        return "image/icon";
    else if (image.RawFormat.Equals(ImageFormat.Png))
        return "image/png";
    else if (image.RawFormat.Equals(ImageFormat.Tiff))
        return "image/tiff";
    else if (image.RawFormat.Equals(ImageFormat.Wmf))
        return "image/wmf";
    return string.Empty;
}

在我這里的實際場景中,大部分文件都有后綴名,即可以用 MimeMapping 處理,對於沒有后綴名的,都是圖片文件,可以用后面這種方式處理。

當然,還可以根據文件頭內容,先獲取文件類型,在找到對應的 MIME Type 。但這個需要自己維護一個文件頭標識的表,不知道有沒有現成的 NUGET 可以用,求推薦。

相關工具

5 Tools To Help Identify Unrecognized or Unknown File Types • Raymond.CC

ExifTool 這個工具很強大,可以看很多文件元數據信息,有命令行版本和GUI版本。

ExifTool by Phil Harvey
ExifToolGUI

其它

看到 How can I determine file type without an extension on Windows? - Super User
有個疑問,根據文件內容獲取文件的類型/MIME type,本質上是不靠譜的?只能靠猜?只是對大部分常見文件類型,有固定格式而已?

畢竟文件內容是什么,開發者是可以任意控制的。

參考鏈接或相關鏈接:

原文鏈接:
https://www.cnblogs.com/jasongrass/p/11635454.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM