2011-08-24 48 views

回答

26

我相信我已經想出了一個簡單的解決方案,非常適合圖像。這使用擴展方法和Linq,所以它將在.net framework 3.5+上工作。這裏的代碼和單元測試:

public static string GetMimeType(this Image image) 
{ 
    return image.RawFormat.GetMimeType(); 
} 

public static string GetMimeType(this ImageFormat imageFormat) 
{ 
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); 
    return codecs.First(codec => codec.FormatID == imageFormat.Guid).MimeType; 
} 

[TestMethod] 
public void can_get_correct_mime_type() 
{ 
    Assert.AreEqual("image/jpeg", ImageFormat.Jpeg.GetMimeType()); 
    Assert.AreEqual("image/gif", ImageFormat.Gif.GetMimeType()); 
    Assert.AreEqual("image/png", ImageFormat.Png.GetMimeType()); 
} 
+1

+1包括工作單元測試(以及是正確答案) – Lavamantis

+2

作爲一個小改進,使用GetImageDecoders代替GetImageEncoders可能會更好。在我的系統上沒有EMF文件的編碼器。然而有一個解碼器。 – Dbuggy

1

如果你要確定從一個文件名(或擴展名)的MIME類型,這裏是使用註冊表中的一個鏈接:Get MimeType from a File Name

+0

我得到503與您的鏈接。 –

+0

@ x2 - 奇怪,我剛剛點擊了我的答案,它適用於我。 HTTP 503(服務不可用)應該是一個臨時性問題。你應該稍後再試。 –