【问题标题】:Displaying a database image with MVC page使用 MVC 页面显示数据库图像
【发布时间】:2013-12-11 11:24:19
【问题描述】:

我有一个 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 文件夹中,但没有任何区别。

我现在有点不知所措,如果遇到此问题并使其正常工作的人提供任何指导,我将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    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" />
    

    【讨论】:

    • 太棒了,谢谢!简单的答案是多么美妙。
    猜你喜欢
    • 2015-08-01
    • 2016-08-26
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2013-04-08
    • 2017-06-30
    相关资源
    最近更新 更多