用ashx动态生成文件

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

        }     } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值