来自字节数组的ASP.NET MVC图像

时间:2013-11-23 17:15:33

标签: c# asp.net-mvc model-view-controller

目前我的ViewModel中有一个代表我的Image的字节数组。我用以下代码显示它:

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

现在我不希望在源文件中有一个Base64字符串,而是一个指向图像的链接。像:

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

会返回一张图片。

如何编写这样的方法来返回图像链接?

2 个答案:

答案 0 :(得分:44)

您可以定义将为图像提供服务的控制器操作:

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 })" />

答案 1 :(得分:9)

一种方法是将其添加到新的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)