しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

data URL スキームを作るヘルパー .NET 4.5 版

data URL スキームを作成するヘルパー - しばやん雑記 で data URL スキームを作るヘルパーを作っていますが、これを .NET 4.5 対応させてもうちょっと幸せになりたいと思います。

本来ならば MIME type を拡張子から判別してもいいんですが、IIS が持っている MIME map を取得する方法がなかったので指定する形にしました。

と書いていたのですが .NET 4.5 から System.Web.MimeMapping クラスが公開されたので、簡単にファイル名から対応する MIME を取得することが出来るようになりました。

いやはや、非常にありがたい情報ですね。という訳で、早速 .NET 4.5 向けに ToDataUrl ヘルパーを修正してみます。

public static class UrlExtensions
{
    public static string ToDataUrl(this UrlHelper helper, string contentPath)
    {
        // 仮想パスをサーバの物理パスにマッピングする
        var path = helper.RequestContext.HttpContext.Server.MapPath(contentPath);

        // ファイルをバイト列として読み込む
        var bytes = File.ReadAllBytes(path);

        // data URL スキームの形にして出力
        return string.Format("data:{0};base64,{1}", MimeMapping.GetMimeMapping(path), Convert.ToBase64String(bytes));
    }
}

IIS とヘルパーで 2 重にマッピング用のテーブルを持つ必要が無くなったのですっきりしました。.NET 4.5 で追加された機能は地味に多そうなので調べていきたいですね。