簡體   English   中英

使用處理程序從ASP.NET頁上的Blob渲染圖像。 我不明白

[英]Using a handler to render an image from a blob on an ASP.NET page. I can't get it

我正在開發一個簡單的圖像標記和搜索應用程序。 我已經將圖像上傳到數據庫,並且已應用標簽,但是當我將其拉回時失敗了-圖像無法渲染。

我在SO上找到了這個 ,但無法正常工作。

我想我可能是誤會了處理程序。

簡而言之,在后面的代碼中,我將創建一個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中注冊處理程序。

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;
        }
    }

}

基本上,只要先做一個簡單的測試,如果可行,那么我建議這是您從數據庫返回的數據。

好奇:您是否正在使用BLOB來避免熱鏈接? (有更好的方法可以做到這一點)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM