手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

用ashx动态生成文件

来源:互联网 作者:west263.com 时间:2008-02-22
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

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

}
}
}

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!