zoukankan      html  css  js  c++  java
  • 自定义HTTP处理程序显示图片(asp.net 2.0)

    自定义HTTP处理程序,就是HTTP处理程序必须实现接口System.Web.IHttpHandler。
    在实现接口IHttpHandler时,必须做两件事,一件事是设置IsReusable属性,另一件事是实现ProcessRequest()方法。
    创建Generic Handler.

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

    using System;
    using System.IO;
    using System.Web;

    public class Handler : IHttpHandler {

     public bool IsReusable {
      get {
       return true;
      }
     }
     
     public void ProcessRequest (HttpContext context) {
      // Set up the response settings
      context.Response.ContentType = "image/jpeg";
      context.Response.Cache.SetCacheability(HttpCacheability.Public);
      context.Response.BufferOutput = false;
      // Setup the Size Parameter
      PhotoSize size;
      switch (context.Request.QueryString["Size"]) {
       case "S":
        size = PhotoSize.Small;
        break;
       case "M":
        size = PhotoSize.Medium;
        break;
       case "L":
        size = PhotoSize.Large;
        break;
       default:
        size = PhotoSize.Original;
        break;
      }
      // Setup the PhotoID Parameter
      Int32 id = -1;
      Stream stream = null;
      if (context.Request.QueryString["PhotoID"] != null && context.Request.QueryString["PhotoID"] != "") {
       id = Convert.ToInt32(context.Request.QueryString["PhotoID"]);
       stream = PhotoManager.GetPhoto(id, size);
      } else {
       id = Convert.ToInt32(context.Request.QueryString["AlbumID"]);
       stream = PhotoManager.GetFirstPhoto(id, size);
      }
      // Get the photo from the database, if nothing is returned, get the default "placeholder" photo
      if (stream == null) stream = PhotoManager.GetPhoto(size);
      // Write image stream to the response stream
      const int buffersize = 1024 * 16;
      byte[] buffer = new byte[buffersize];
      int count = stream.Read(buffer, 0, buffersize);
      while (count > 0) {
       context.Response.OutputStream.Write(buffer, 0, count);
       count = stream.Read(buffer, 0, buffersize);
      }
     }

    }

    public static Stream GetPhoto(int photoid, PhotoSize size) {
      using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Personal"].ConnectionString)) {
       using (SqlCommand command = new SqlCommand("GetPhoto", connection)) {
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@PhotoID", photoid));
        command.Parameters.Add(new SqlParameter("@Size", (int)size));
        bool filter = !(HttpContext.Current.User.IsInRole("Friends") || HttpContext.Current.User.IsInRole("Administrators"));
        command.Parameters.Add(new SqlParameter("@IsPublic", filter));
        connection.Open();
        object result = command.ExecuteScalar();
        try {
         return new MemoryStream((byte[])result);
        } catch {
         return null;
        }
       }
      }
     }


    public static Stream GetFirstPhoto(int albumid, PhotoSize size) {
      using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Personal"].ConnectionString)) {
       using (SqlCommand command = new SqlCommand("GetFirstPhoto", connection)) {
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@AlbumID", albumid));
        command.Parameters.Add(new SqlParameter("@Size", (int)size));
        bool filter = !(HttpContext.Current.User.IsInRole("Friends") || HttpContext.Current.User.IsInRole("Administrators"));
        command.Parameters.Add(new SqlParameter("@IsPublic", filter));
        connection.Open();
        object result = command.ExecuteScalar();
        try {
         return new MemoryStream((byte[])result);
        } catch {
         return null;
        }
       }
      }
     }

  • 相关阅读:
    Linux常用命令ifconfig的相关信息
    搭建路由实例
    httpclient以json形式参数调用http接口并解析返回的报文
    思考(机遇)
    php 对齐方法
    RequireJS简单介绍即使用
    一周小结(2016-06-06~2016-06-12)
    git介绍及使用
    一周小结(2016-05-30~2016-06-04)
    [转] Mou 一个Markdown工具 语法规则文档(最后)
  • 原文地址:https://www.cnblogs.com/liping13599168/p/567235.html
Copyright © 2011-2022 走看看