《拓文asp.net网站内容管理系统》官方演示站。
 设为首页  
 收藏本站
 作者:黄振安
 QQ:53854651
首 页 开源拓文.NET编程网站编程网页设计图形图像数据库软件工程留言本
    站内搜索:  
您现在的位置: 拓文网络 → .NET编程 → ASP.NET → 用ashx动态生成文件[正文]

热 门 文 章

相 关 文 章
  • ASP.NET性能优化
  • 在.NET框架应用程序中发送电子邮件
  • .net打包自动安装数据库
  • asp.net开发wap必备:更好的匹配手机设备
  • windows 2003下asp.Net站点无法使用用户名+密码的方
  • ASP.NET中17种正则表达式
  • 提高ASP.Net应用程序性能的十大方法
  • 一个通过web.Mail发送邮件的类
  • 在DataGrid里面根据日期的不同显示new图标
  • Asp.Net细节性问题精萃
  • 用ashx动态生成文件
     
    [作者:不详    转贴自:不详    点击数:    更新时间:2006-3-2 15:24:37]

     

    大概去年九月的时候,做一个功能就是生成图片,当然有很多方法,生成图片放在服务器的某个目录下面,隔一段时间就删除,图还得自己画,嫌麻烦,结果找着这样一段代码,今天看到使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。突然发现这种用法讨论的很好,也许是没怎么详细介绍它的官方中文文档吧,并且推荐另外一种方法代替。

    // ----------------------------------------
    // Pick your favorite image format
    // ------------------------------
    byte[]  byteArr = (byte[]) oChartSpace.GetPicture ("png", 500, 500);
    // ----------------------------------------
    // Store the chart image in Session to be picked up by an HttpHandler later
    // ---------------------------------------
    HttpContext     ctx = HttpContext.Current;
    string          chartID = Guid.NewGuid ().ToString ();
               
    ctx.Session [chartID] = byteArr;
    imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", chartID);

    chart.ashx里面就下面一句话

    <% @ WebHandler language="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart.ashx.cs" %>

    其实也可以用这个代替

    在web.config里面的<system.web>里面加上

     <httpHandlers>
      <add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " validate="false" /> /*ChartHandler  是那个ashx.cs编译后生成的代码Assembly*/
      
      <!--Since we are grabbing all requests after this, make sure Error.aspx does not rely on .Text -->
      <add verb="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" />
      

     </httpHandlers>

    具体使用哪个都无所谓,后一种配置好了就方便一些,不用管路径了,其实这个思想的应用比较知名的在.text里面就已经有了,只不过应用的方向不同。

    ashx.cs文件的代码

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

    namespace AspNetResources.Owc
    {
     public class ChartHandler : IHttpHandler, IReadOnlySessionState
     {
            public bool IsReusable
            {
                get { return true; }
            }
       
            public void ProcessRequest (HttpContext ctx)
            {
                string chartID = ctx.Request.QueryString[0];
                Array arr = (Array) ctx.Session [chartID];

                ctx.ClearError ();
                ctx.Response.Expires = 0;
                ctx.Response.Buffer = true;
                ctx.Response.Clear ();

                MemoryStream memStream = new MemoryStream ((byte[])arr);
                memStream.WriteTo (ctx.Response.OutputStream);
                memStream.Close ();

                ctx.Response.ContentType = "image/png";
                ctx.Response.StatusCode = 200;
                ctx.Response.End ();

            }
        }
    }


    首页 | 1 | 尾页  共 1 页
     
    winner 打印本页 关闭窗口

         文 章 评 论
    评论人 查看该文章的评论 发表时间
       笔 名* : 0 50分 60分 70分 80分 90分 100分
    评论内容 *: (最多1000字。当前字数:0)


    没有相关评论,欢迎您参与!

    - 关于本站 - 网站帮助 - 下载声明 - 友情连接 - 网站地图 -
    Copyright © 2005-2006 myTopWin.Com. All Rights Reserved . [桂ICP备06004496号]