使用ASP.Net MVC3显示包含在byte []中的图像

J4N*_*J4N 20 c# asp.net-mvc strong-typing razor asp.net-mvc-3

我有一个强大的观点.这个强类型有一个由byte []组成的字段,这个数组包含一个图片.

是否可以使用@ Html.Image(Model.myImage)等显示此图像?

非常感谢你

Dmi*_* S. 17

您可以创建一个控制器操作方法,将图像作为FileContentResult返回:

public FileContentResult Display(string id) {
   byte[] byteArray = GetImageFromDB(id);
   return new FileContentResult(byteArray, "image/jpeg");
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用模型中的图像ID为视图中的action方法创建ActionLink.


Mar*_*ell 8

这取决于图像的大小.如果它很小,你可以写一些东西到base-64编码并将其嵌入到html中,就像其中任何一个一样.

从这里得到一个具体的例子:

<img src="data:image/gif;base64,R0lGODlhUAAPAKIAAAsLav///88PD9WqsYmApmZmZtZfYmdakyH5BAQUAP8ALAAAAABQAA8AAAPbWLrc/jDKSVe4OOvNu/9gqARDSRBHegyGMahqO4R0bQcjIQ8E4BMCQc930JluyGRmdAAcdiigMLVrApTYWy5FKM1IQe+Mp+L4rphz+qIOBAUYeCY4p2tGrJZeH9y79mZsawFoaIRxF3JyiYxuHiMGb5KTkpFvZj4ZbYeCiXaOiKBwnxh4fnt9e3ktgZyHhrChinONs3cFAShFF2JhvCZlG5uchYNun5eedRxMAF15XEFRXgZWWdciuM8GCmdSQ84lLQfY5R14wDB5Lyon4ubwS7jx9NcV9/j5+g4JADs=" alt="British Blog Directory" width="80" height="15">
Run Code Online (Sandbox Code Playgroud)

如果图像具有任何可观的大小,您可能希望编写一条路径,允许通过某些键查找图像,即路径,如/images/{id}- 在该路径中,您获取图像二进制并使用return File(bytes, contentType),另外设置缓存标题(并记住重新检查任何必要的安全性).在你的HTML中,你只需要一个

<img src="/images/@imageId" ... />
Run Code Online (Sandbox Code Playgroud)

(使用razor语法,但对于aspx类似).

单独的路由方法需要额外跳转到服务器,但允许在客户端进行缓存(内联base-64方法将数据放在每个请求上).


Len*_*rri 7

如果您已经将图像中的图像作为byte[]数组加载,那么可以像@Marc Gravell在他的回答中提到的那样:

<img src="data:image;base64,@System.Convert.ToBase64String(Model.Photo)" />
Run Code Online (Sandbox Code Playgroud)

这大大简化了整个过程,您不需要具有特定的FileContentResult操作方法并再次访问数据库(请参阅@Dmitry S的答案),只是为了byte[]使用您的图像/照片获取该数组,因为您已经将其加载到模型中.