欢迎光临
我们一直在努力

用ashx动态生成文件-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

 

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

        }
    }
}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 用ashx动态生成文件-.NET教程,Asp.Net开发
分享到: 更多 (0)