2013-11-23 17 views
19

現在、私は自分のViewModelの画像を表すバイト配列を持っています。私は、次のコードでそれを表示:バイト配列からのASP.NET MVC画像

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

今、私は私のソースファイル内にBase64文字列を持つようにしたいのではなく、画像へのリンクはありません。 Like:

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

Imageを返します。

イメージリンクを返す方法はありますか?

答えて

41

あなたが画像を提供しますコントローラのアクションを定義できます。

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 
    } 
} 

をし、あなたのビューで、単純にこのコントローラのアクションにimgタグのsrcプロパティを指す:

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

ありがとうございます。それは動作し、できるだけ早く答えを受け入れるでしょう – Florian

+0

生成されたファイルは一時的ですか? – notsoux

+2

@notsoux、ここにはファイルはありません。サーバーは、ファイルを作成せずに、データベースからクライアントに直接データをストリーミングしています。このストリームで何をすべきかを決めるのはクライアントの責任です。 –

9

一つの方法これを新しいC#クラスまたはHtmlExtensionsクラスに追加することです

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) 
関連する問題