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

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

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

非常感谢你

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

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

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

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

有关此处的具体示例 :

 British Blog Directory 

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

  

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

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

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

  

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

听起来你需要一个新的动作来获取字节数组(来自数据库?)并通过File方法返回图像….

然后生成指向该操作的锚点,这样可以在页面加载时加载图像,从而加快显示速度。

我会设计一个简单的通用处理程序来提供图像。 给定一些参数,此处理程序可以从数据库加载图像,并将它们写入http输出流。

 public class UserImage : IHttpHandler { public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/jpeg"; // Get the stream from the database var image = System.Drawing.Image.FromStream(stream); image.Save(context.Response.OutputStream, ImageFormat.Jpeg); } }