使用MVC页面显示数据库图像

时间:2013-12-11 11:24:19

标签: sql asp.net-mvc image ashx filehandler

我有一个MVC Web应用程序,我试图在页面上显示图像(来自数据库),但没有成功。按照我发现的各种例子;我有我的页面“ImageTest.aspx”和处理程序“ImageViewer.ashx”

处理程序的内容是

<%@ WebHandler Language="C#" Class="ImageHandler" %>

using System.Web;

namespace Decri.WebClient.Views.Tablet
{
    public class ImageViewer : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpeg";
            context.Response.WriteFile("palmtree.jpg");
        }

        public bool IsReusable
        {
            get { return false; }
        }
    }
}

我的“ImageTest”页面包含以下内容(尝试在使用数据库之前使基本功能正常工作)

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Image Test</h2>

    <img src="ImageViewer.ashx?id=1" alt="Dynamic Image" />

</asp:Content>

页面加载了“红叉”缺失的图像图标,在调试时,代码不会停在我放置在处理程序中的“ProcessRequest”的断点处。查看HTML源代码,代码与上面相同(添加了从Site.Master中获取的HTML)。

我们基于这里的控制器,其中控制器中的条目保持简单(控制器中没有任何处理程序,我理解为正确):

    public ActionResult ImageTest()
    {
        return View();
    }

我注意到如果我在文件夹中有正常的图像并正常引用它(没有处理程序)它就不会显示;将它移动到CONTENT \ IMAGES文件夹,确实如此。试图将处理程序复制到CONTENT \ IMAGES文件夹中并且没有任何区别。

我现在处于一种损失状态,并希望得到任何有这个问题的人的指导并让它发挥作用。

1 个答案:

答案 0 :(得分:3)

试试这个:

context.Response.WriteFile(context.Server.MapPath("~/Content/Images/palmtree.jpg"));

不调用MapPath,处理程序将在应用程序的bin目录中查找图像。

由于您使用的是MVC框架,因此更加一致(您不需要实现自己的处理程序):

public class HelloController : Controller
{
    public ActionResult ShowImage(int id)
    {
        var fileName = "palmtree.jpg";
        var rawFile = LoadFile(); //Assuming, LoadFile() returns byte[]

        return File(rawFile, MimeMapping.GetMimeMapping(fileName), fileName);
    }
}

查看:

<img src="@Url.Action("ShowImage", "Hello", new { id = 1 })" alt="Dynamic Image" />