代码之家  ›  专栏  ›  技术社区  ›  Kai

ASP.NET MVC:从数据库加载图像并在视图中显示它们

  •  9
  • Kai  · 技术社区  · 14 年前

    我们的数据库中有一些图像,希望在视图中显示它们。我发现 这样做- 第一次

    public ActionResult GetImage( int id )
        {
            var imageData = ...get bytes from database...
    
            return File( imageData, "image/jpg" );
        }
    

    视图中的代码:

    <img src='<%= Url.Action( "GetImage", "image", new { id = ViewData["imageID"] } ) %>' />
    

    第二次 方法是使用HttpHandler:

    public void ProcessRequest(HttpContext Context)
      {
          byte [] b = your image...;
          Context.Response.ContentType = "image/jpeg";
          Context.Response.BinaryWrite(b);
      }
    

    <img src="AlbumArt.ashx?imageId=1" />
    

    第一个问题是什么是实现此功能的最有效(工作得更快)方法(以及为什么它工作得更快)?
    第二个问题-当我们第一次调用action方法返回这个视图时,是否有一种方法可以直接将图像放到我们的视图中?我的意思是,在实际方法中,我们从数据库中获取图像列表,并将它们的in-view作为列表传递,in-view使用以下代码:

    <%=Html.Image(Model[i])%>
    

    1 回复  |  直到 14 年前
        1
  •  6
  •   Darin Dimitrov    14 年前

    这两种方法在性能上不会有太大差别。显然,使用http处理程序将是最快的,因为请求没有经过MVC生命周期(路由、实例化控制器、模型绑定、调用操作),但我认为这是一个微观优化,我个人会使用第一种方法,因为它更适合MVC场景。如果您后来通过执行大量的负载测试意识到这是应用程序的瓶颈,那么您可以始终切换到http处理程序方法。

    data URI scheme 但这并非所有浏览器都支持。这样,如果模型具有图像的字节数组,则可以编写一个呈现以下内容的助手:

    <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAA..." alt="Red dot" />