在数据库中的ASP.NET(3.5)网页上显示图像

时间:2009-09-10 21:25:16

标签: asp.net

我是ASP.NET的新手。我正在使用ASP.NET 3.5(VS 2008)开发一个站点,我想要做的就是:

  1. 将图像上传到服务器(我通过FileUpload控件执行此操作)
  2. 将数据库中的字节(byte [])保存在某些表格中
  3. 当用户调用一个页面时,比如说,Index.aspx?id = 10,然后我去一个表,拉出id = 10的相关行,其中一个单元格中有图像[ ]格式

  4. 我现在想在网页上显示此图片,其中包含其他内容。

  5. 我似乎无法弄清楚如何执行此操作 - 图像控件只需要一个URL,我不想将图像保存在磁盘上。

    有什么想法吗?

    -Rick

2 个答案:

答案 0 :(得分:2)

您需要创建一个实现IHttpHandler接口的类。这样的事情就足够了:

public class ImageHttpHandler : IHttpHandler
{
  //code omitted

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

  public void ProcessRequest(HttpContext context)
  {
      //GetImageUrl is implemented elsewhere
      var imageURL = GetImageUrl(context.Request.Params["URL"]);

      //GetImageContentFromDatabase returns a structure with MIMEType and Content properties
      var imageData = GetImageContentFromDatabase(imageURL);

      if(imageData != null)
      {
        context.Response.ContentType = imageData.MIMEType;
        context.Response.BinaryWrite(imageData.Content);
      }
      else
      {
        context.Response.StatusCode = 404;
      }
  }
}

您可以将此类放在App_Code目录中,或者,如果要概括此行为,则可以将其放在单独的程序集中。

然后,您可以在web.config文件中引用此处理程序,如下所示:

<system.web>
  <httpHandlers>
    <add verb="GET" path="*.imgx" type="ImageHttpHandler"/>
  </httpHandlers>
</system.web>

这意味着对扩展名为imgx的文件的所有get请求都应该定向到ImageHttpHandler类。

这适用于Cassini(Visual Studio开发Web服务器),但您需要对IIS网站/虚拟目录进行其他更改。

转到IIS MMC管理单元并访问此目录的属性。您需要找到位于“虚拟目录”或“主目录”选项卡中的“配置”按钮。在那里,添加imgx作为应用程序扩展,将可执行文件设置为aspnet_isapi.dll。它位于我的机器上,位于C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727。为简单起见,请选择“所有动词”,然后取消选中“验证文件是否存在。”

您在网页中定义的超链接应使用imgx扩展名。根据您的需要,您可以将链接定义为“myimage.imgx”或“GetImage.imgx?id = XXX”。这取决于您的需求以及您打算如何从数据库中检索图像内容。

答案 1 :(得分:0)