网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

用ashx动态生成文件

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/13

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

        }
    }
}

 

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号