用户操作
[即时聊天] [发私信] [加为好友]
阿呆ID:daqingshu
22587次访问,排名5251(-2)好友0人,关注者0
daqingshu的文章
原创 14 篇
翻译 0 篇
转载 23 篇
评论 5 篇
阿呆的公告
还是喜欢那一片幽静 致远的地方 真的好舒服吗? 等到我去的时候 你还是那样美丽吗?
Q俺 Free Counter
Free Counter
最近评论
hero19851205:又是和别人一样的东西
文章分类
收藏
相册
Blogs
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 用ashx动态生成文件收藏

新一篇: zz:用MSBuild.... DailyBuild和软件开发流程的东东  | 旧一篇: 用简单的VBA实现Excel表格计算

大概去年九月的时候,做一个功能就是生成图片,当然有很多方法,生成图片放在服务器的某个目录下面,隔一段时间就删除,图还得自己画,嫌麻烦,结果找着这样一段代码,今天看到使用.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 ();

        }
    }
}


发表于 @ 2005年09月25日 02:51:00|评论(loading...)|编辑

新一篇: zz:用MSBuild.... DailyBuild和软件开发流程的东东  | 旧一篇: 用简单的VBA实现Excel表格计算

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 阿呆