1

我编写了一个处理程序,它从显示的数据库中返回一个图像。Nw 我想要一个与特定图像相关的图像数组。就像如果图像“A 与图像“B”、“C”和“D”相关,我希望 http 处理程序返回 A、B、C 和 D 图像。这样我就可以在网络上显示图像页面。如何返回图像数组或图像列表?

这是我的处理程序代码。

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

using System;
using System.Web;
using System.Configuration;
using System.IO;
using System.Data;
using System.Data.SqlClient;

public class DisplayImg : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string theID;
        if (context.Request.QueryString["id"] != null)
            theID = context.Request.QueryString["id"].ToString();
        else
            throw new ArgumentException("No parameter specified");

        context.Response.ContentType = "image/jpeg";
        Stream strm = DisplayImage(theID);
        byte[] buffer = new byte[2048];
        int byteSeq = strm.Read(buffer, 0, 2048);

        while (byteSeq > 0)
        {
            context.Response.OutputStream.Write(buffer, 0, byteSeq);
            byteSeq = strm.Read(buffer, 0, 2048);
        }
    }

    public Stream DisplayImage(string theID)
    {
        SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SERVER"].ConnectionString.ToString());
        string sql = "SELECT Server_image_icon FROM tbl_ServerMaster WHERE server_Code = @ID";
        SqlCommand cmd = new SqlCommand(sql, connection);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@ID", theID);
        connection.Open();
        object theImg = cmd.ExecuteScalar();
        try
        {
            return new MemoryStream((byte[])theImg);
        }
        catch
        {
            return null;
        }
        finally
        {
            connection.Close();
        }
    }

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

1 回答 1

0

您不能在单个 httphandler 中执行此操作,因为您返回的是字节流。以下是您可以分两步执行此操作的方法:

1) 编写一个新的 httphandler,它返回相关的图像 URL 列表。

2) 使上述 URL 指向您的 DisplayImg 处理程序。

浏览器将呈现您的第一个处理程序的结果,然后它将使用您的第二个处理程序 (DisplayImg) 获取每个图像。

于 2012-11-08T05:11:43.063 回答