使用处理程序呈现ASP.NET页面上blob中的图像。我能';我不明白

使用处理程序呈现ASP.NET页面上blob中的图像。我能';我不明白,.net,asp.net,vb.net,blob,handler,.net,Asp.net,Vb.net,Blob,Handler,我正在开发一个简单的图像标记和搜索应用程序。 我已经将我的图像上传到数据库,标签正在应用,但是当我把它们拉回来时,我失败了——图像无法渲染 我发现这里是这样的,但我不能让它工作 我想我可能是误会了 简而言之,在后面的代码中,我创建了一个ASP:Image,将其imageurl设置为带有照片id的处理程序,然后将该控件添加到一个ASP:Placeholder中 当页面呈现时,我得到,在IE中,红色的x没有图像,在FF中,没有 有一件事让我觉得我遗漏了什么,那就是我的处理程序代码中的断点从未被命中。

我正在开发一个简单的图像标记和搜索应用程序。 我已经将我的图像上传到数据库,标签正在应用,但是当我把它们拉回来时,我失败了——图像无法渲染

我发现这里是这样的,但我不能让它工作

我想我可能是误会了

简而言之,在后面的代码中,我创建了一个ASP:Image,将其imageurl设置为带有照片id的处理程序,然后将该控件添加到一个ASP:Placeholder中

当页面呈现时,我得到,在IE中,红色的x没有图像,在FF中,没有

有一件事让我觉得我遗漏了什么,那就是我的处理程序代码中的断点从未被命中。所以它甚至被处决了。对吧?

有人知道我做错了什么吗?谢谢

这是我的经纪人

Imports aapeClsLib
Imports System.Web
Imports System.Web.Services

Public Class photos
    Implements System.Web.IHttpHandler

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        Dim img As Byte() = getImage(context.Request.QueryString("ID"))
        context.Response.Clear()
        context.Response.ContentType = "image/jpeg"
        context.Response.BinaryWrite(img)
        context.Response.End()
    End Sub

    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property


    Private Function getImage(ByVal id As String) As Byte()
        Dim img As Byte()

        Dim strSql As String = "select ph_photo from photos where ph_id = " & id
        Dim dt As DataTable = sqLiteData.getDataTable(strSql)
        img = CType(dt.Rows(0)(0), Byte())

        Return img


    End Function
End Class
我把它放在我的占位符里

Private Sub insertPhotos(ByVal dt As DataTable)
     For Each row As DataRow In dt.Rows

         Dim img As New Image
         img.ImageUrl = "photos.ashx?ID=" & row(0)
         PlaceHolder1.Controls.Add(img)

     Next
 End Sub

看起来您没有在web.config中注册处理程序和/或在IIS中注册扩展。有关更多详细信息,请参阅和


编辑:我现在知道你正在使用.ashx作为扩展名,所以你通常不需要注册它。现在主要线索是web.config中的处理程序注册。

好奇:您是否使用BLOB来避免热链接? (有更好的方法可以做到这一点)

C#例如,这对我来说很好——您可能需要添加内容长度标题:

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

using System;
using System.Web;

public class Photo : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "image/jpeg";
        context.Response.BinaryWrite(System.IO.File.ReadAllBytes("C:\\Test.jpg"));
        context.Response.AddHeader("Content-Length", new System.IO.FileInfo("C:\\Test.jpg").Length.ToString());
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

使用制度;
使用System.Web;
公开课照片:IHttpHandler{
公共void ProcessRequest(HttpContext上下文){
context.Response.ContentType=“image/jpeg”;
context.Response.BinaryWrite(System.IO.File.ReadAllBytes(“C:\\Test.jpg”);
context.Response.AddHeader(“Content Length”,new System.IO.FileInfo(“C:\\Test.jpg”).Length.ToString();
}
公共布尔可重用{
得到{
返回false;
}
}
}

基本上,先做一个简单的测试,如果可行的话,我建议您从数据库返回数据。

所以对于集成模式下的IIS7,我需要将以下内容添加到我的web.config?resourceType=“Unspecified”/>刚刚添加了这一点,在我修复了丢失的结束标记后,它仍然无法加载。我是在live网站上做的,因为我在家里,这里没有开发框。你还必须在system.web部分添加条目。没有,但这回答了我脑海中反复出现的另一个问题。我只是想这么做。我终于有了,并且可以用它来尝试和学习新的东西-在工作中,我总是做他们的事情,而且反正都是内联网,所以我永远不能用它来做投资组合或任何事情。嘎!我是一个彻头彻尾的裸体者(对不起,这句话让我捧腹大笑)。我没有向数据库写入任何内容-在我的上传中,我只是设置byte()的大小,然后将其上传为空。谢谢你,伙计!