web-dev-qa-db-ja.com

バイト配列からのASP.NET MVCイメージ

現在、ViewModelにイメージを表すバイト配列があります。次のコードで表示します。

<img src="@String.Format("data:image/gif;base64,{0}", Convert.ToBase64String(Model.Image))" />

ここで、ソースファイルにBase64文字列を含めるのではなく、イメージへのリンクを使用します。お気に入り:

<img src="Images/" + Model.Id"/>

imageを返します。

Imageリンクを返すようなメソッドを作成するにはどうすればよいですか?

20
Florian

イメージを提供するコントローラーアクションを定義できます。

public class ImagesController: Controller
{
    public ActionResult Index(int id)
    {
        byte[] imageData = ... go get your image data from the id
        return File(imageData, "image/png"); // Might need to adjust the content type based on your actual image type
    }
}

ビューでは、srcタグのimgプロパティをこのコントローラーアクションにポイントするだけです。

<img src="@Url.Action("Index", "Images", new { id = Model.Id })" />
44
Darin Dimitrov

1つの方法は、これを新しいc#クラスまたはHtmlExtensionsclassに追加することです

public static class HtmlExtensions
{
    public static MvcHtmlString Image(this HtmlHelper html, byte[] image)
    {
        var img = String.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(image));
        return new MvcHtmlString("<img src='" + img + "' />");
    }
}

その後、任意のビューでこれを行うことができます

@Html.Image(Model.MyImageBytes)
9
Moji