MIMETypeの取得
ファイルのMIMETypeを取得する方法です。
.NET Frameworkによって違いますので、お好みの方をどうぞ。
.NET Framework4.5以上
System.Web.MimeMappingクラスのGetMimeMappingメソッドへファイル名を渡すことで取得可能です。
System.Web.MimeMapping.GetMimeMapping("ファイル名");
System.Web.MimeMapping.GetMimeMapping("ファイル名")
GetMimeMappingメソッドはフルパスを渡しても結果的には一緒です。恐らく内部的にファイル拡張子から判断しているものと思われます。
ですので、拡張子が認識できない場合はnullを返さずoctet-streamを返します。ファイル有無も関係ありません。
.NET Framework4.0まで
System.Web.MimeMappingクラスでは取得できませんので、ClassRootレジストリからContent Typeを取得する方法となります。
使い方によりけりですが、GetMimeMappingメソッドと合わせるならデフォルトでoctet-streamを返す仕様が好ましいです。あえてnullを返すという手もありますが、臨機応変にどうぞ。
private string GetMimeTypeByExtension(string ext) { string res = "application/octet-stream"; try { var key = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext); if (key != null) { var mimetype = key.GetValue("Content Type"); if (mimetype != null) res = (string)mimetype; } } catch { } return res; }
Private Function GetMimeTypeByExtension(ByVal ext As String) As String Dim res As String = "application/octet-stream" Try Dim key = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext) If key IsNot Nothing Then Dim mimetype = key.GetValue("Content Type") If mimetype IsNot Nothing Then res = CType(mimetype, String) End If Catch ex As Exception End Try Return res End Function
if文のところはnull条件演算子を使えばもっと簡潔に書けますが、.NET Framework4.0では使用できないので少し読みにくいですが仕方ありません。