経緯
ウェブブラウザからアップロードした任意のファイルをダウンロードできるようにしたいです。
このファイルは任意なため、MIME タイプ、content-type を事前に知ることができません。
ファイルの拡張子から対応するコンテントタイプを引き出すことになりますけれども、対応するマップは作りたくありませんの><。
調べた結果
.NET4.5 から MimeMapping.GetMimeMapping メソッドが用意されていました!
使用例とポイント
- CSV ファイルの場合、application/octet-stream となる。text/csv や text/comma-separated-values とならなかった。
- パスは含めても含めなくてもファイル名から MIME タイプ文字列を返却してくれる。
string ct = MimeMapping.GetMimeMapping("Sample.pdf"); // 結果: application/pdf string ct = MimeMapping.GetMimeMapping("Sample.xlsx"); // 結果: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet string ct = MimeMapping.GetMimeMapping("Sample.csv"); // 結果: application/octet-stream // ↑text/csv や text/comma-separated-values とならない! string ct = MimeMapping.GetMimeMapping("Sample.jpg"); // 結果: image/jpeg string ct = MimeMapping.GetMimeMapping("C:/Users/Sample.cs"); // 結果: application/octet-stream string ct = MimeMapping.GetMimeMapping("C:/Users/Sample.zip"); // 結果: application/x-zip-compressed
調べた道筋
- 「.net4.5 mime」で検索
- Getting a MIME type from a file extension in ASP.NET 4.5 – .NET Web Development and Tools Blog – Site Home – MSDN Blogs
- MimeMapping.GetMimeMapping メソッド (String) (System.Web)
- 「MimeMapping.GetMimeMapping」で検索
- data URL スキームを作るヘルパー .NET 4.5 版 – しばやん雑記
おわりに
ちなみに、
- MIME = Multipurpose Internet Mail Extension = 多目的インターネットメール拡張
であることから、content-type とは別物!?、HTML で MimeMapping.GetMimeMapping メソッドを使うのは使いどころを誤っている!? と思いました。
HTML では MIME を拡張して使用しているようですので、問題なさそうです。とても基本的なことでした♪
以上です。