将字节数组转换为Razor视图中的图像和显示

时间:2011-09-26 20:19:49

标签: asp.net-mvc image asp.net-mvc-3 razor bytearray

我正在使用 EF 4.1 Code First ,为了简单起见,假设我有以下实体类:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Byte[] Image { get; set; }
}

我设法创建了一个可用的创建视图,允许将Person对象添加到数据库中。

但是当我来显示一个人的详细信息时,我 卡在显示图像 上。在Google搜索了几个小时后,我有以下内容:

// To convert the Byte Array to the author Image
public FileContentResult getImg(int id)
{
    byte[] byteArray = DbContext.Persons.Find(id).Image;
    return byteArray != null 
        ? new FileContentResult(byteArray, "image/jpeg") 
        : null;
}

在我试图列出人员详细信息的视图中,我有以下内容来显示图像:

<img src="@Html.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />

但是上面无效,我的图片来源 [src]属性返回空

我会 非常感谢帮助 让我的图片显示。

谢谢。

磁碗。

3 个答案:

答案 0 :(得分:59)

如果您已经碰巧在模型中加载了图像,那么有一种更简单的方法:

<img src="data:image;base64,@System.Convert.ToBase64String(Model.Image)" />

这样,您不需要再次访问服务器只是为了从数据库中获取图像byte[]

答案 1 :(得分:35)

像这样:

<img src="@Url.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />

您需要Url.Action而不是Html.Action,因为您只想生成GetImg操作的网址。 Html.Action执行了entirely different

答案 2 :(得分:0)

我发现从Razor MVC页面中的Model属性显示动态加载的SVG图像的最佳方法是将Html.DisplayFor(..)与.ToHTMLString()结合使用。对于我的情况,有一个base 64 SVG Image + XML数据字符串存储在名为Image的model属性中。这是我的代码:

<img src='@Html.DisplayFor(model => model.Image).ToHtmlString()' />

这似乎是我能够在Chrome,FireFox和IE中正确显示SVG图像的唯一方式。

干杯