分享
 
 
 

在Web页内显示Binary(位图)的组件(二)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一、 写在前面:

由于工作比较紧张!代码写多了头脑就会发热,所以程序员一定要注意休息,不要太多的熬夜,俗语说得好:“什么都可以有就是不可以有病!”;

昨晚体验了一下vs2005,真是不一样的感觉,不能不佩服M$的眼光和想象力。深远的影响到每一个程序员。无论是从界面体验、功能体贴、人性化、代码的简洁等哪方面考虑,他带给我们的是效率的提升,和把事情的简单化。简单就是最好的。

我们不需要再加班的梦想也许不会太远了…

让我们一起来吧!

二、 原理:

好了!有时候我们总是喜欢说废话。但是有时候废话却很可以调节心情,那么就继续把:

asp.net显示位图的唯一方法(因为目前我只知道这么一个方法^_^)就是将ImagUrl的连接设到一个页面上,然后在那个叶面将位图Respone到叶面上就行了!不过就是麻烦点而已。就是这样:

src="region.binaryimage\fccc37ab-f4cb-4199-8332-7ff0168daad4.aspx"。

那么要把这样一种过程集成到组建里面去,就可以不用再为建一个目标叶面而浪费时间了,以方便又省事(因为我比较懒,所以我比较喜欢写一些组件以便满足我的惰性)。

经过周密的研究后(^_^)得出一个解决方案:

组件自动产生一个相关目录,在该目录中再建个配置文件,以便把响应重定位到我们自定义类型处理。

三、 组件技术:

那么为了实现这个伟大的组件(^_^),我们需要一些组件方面的技术。

1、也是最重要的一点就是叶面重定位技术,在配置文件节点

<?xml version="1.0" encoding="GB2312" ?>

<configuration>

<system.web>

<httpHandlers>

<add verb="*" path="*" type="Region.Controls.BinaryImageHandler, region.binaryimage"/>

</httpHandlers>

</system.web>

</configuration>

重定位到我们自定义类型。

2、如何实现自定义类型。在.net framework 中提供一个接口来达到这个效果,我们的自定义类型Region.Controls.BinaryImageHandler必须继承自System.Web.IhttpHandler实现他的两个接口。(由于篇幅的关系,更深入的原理就不在这里细说了,感兴趣的话可以查看MSDN)

3、还有一点就是位图的如何从源页传到目标页的呢?由于我们没有目标页,所有处理都在我们的自定义类型当中处理,而HttpHandler已发的时候Session等对象都还没有实力化,唯一可行的方法就是位图保存在Application里面。用完之后删掉就可以了。

4、那么还有几个地方要注意,就是将位图保存在Application中的ID,因为是全局的。所以可以取个GUID来稿定。

基本上就可以这么高定了!

源码发到下面,新建个类库项目将下面代码Copy然后编译就可以了!:(因为不前我还没有空间提供下载,如果哪位好心朋友提供我可上传上去供大家方便下载)

#region[ BinaryImage Show Coponent]

///Author:Region

///MSN:hl_net@msn.com

///Blog:http://Blog.csdn.net/xinyulou

#endregion

using System;

using System.IO;

using System.Web;

using System.Resources;

using System.Reflection;

namespace Region.Controls

{

/// <summary>

/// 显示位图

/// </summary>

/// <code>

/// <%@ Register TagPrefix="Region" Namespace="Region.Controls" Assembly="Region.Controls" %>

/// <Region:BinaryImage id="BinaryImage" runat="server"></Region:BinaryImage>

/// </code>

//[System.Web.UI.ToolboxData("<{0}:BinaryImage runat=server></{0}:BinaryImage>")]

public class BinaryImage:System.Web.UI.WebControls.Image

{

string path1 ;

protected override void OnLoad(EventArgs e)

{

base.OnLoad (e);

path1 = Path.Combine(Page.Request.PhysicalApplicationPath,Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location));

string path2 = Path.Combine(path1,"Web.config");

if (!Directory.Exists(path1))

{

Directory.CreateDirectory(path1);

}

if(!File.Exists(path2))

{

// ResourceManager rm = new ResourceManager(Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location)+".String", Assembly.GetExecutingAssembly());

// string a = rm.GetString("Config");

string a = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"+@"

<configuration>"+@"

<system.web>"+@"

<httpHandlers>"+@"

"+"<add verb=\"*\" path=\"*\" type=\""+this.GetType().Namespace+".BinaryImageHandler, "+Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location)+"\"/>"+@"

</httpHandlers>"+@"

</system.web>"+@"

</configuration>"+@"

";

byte[] bs = System.Text.Encoding.Default.GetBytes(a);

FileStream fileStream = new FileStream(path2,FileMode.Create, FileAccess.Write);

try

{

fileStream.Write(bs, 0,bs.Length);

}

finally

{

if (fileStream != null)

{

((IDisposable)fileStream).Dispose();

}

}

}

}

//唯一ID

public string GUID

{

get

{

if( ViewState[UniqueID]== null)

ViewState[UniqueID] = Guid.NewGuid().ToString();

return (string)ViewState[UniqueID];

}

}

//[System.ComponentModel.Browsable(false)]

public byte[] Binary

{

set{ Page.Session[GUID] = value;}

get{return Page.Session[GUID]==null?null:(byte[])Page.Session[GUID];}

}

protected override void Render(System.Web.UI.HtmlTextWriter writer)

{

if(ImageUrl == "")

{

ImageUrl = Path.Combine(Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location), GUID+".aspx");

if(Page.Application[GUID] == null)

Page.Application[GUID] = Binary;

}

base.Render(writer);

}

}

public class BinaryImageHandler:System.Web.IHttpHandler

{

public virtual bool IsReusable

{

get{return true;}

}

public virtual void ProcessRequest(HttpContext context)

{

string id = Path.GetFileNameWithoutExtension(context.Request.FilePath);

if(context.Application[id] != null)

{

byte[] bs = (byte[])context.Application[id];

HttpContext.Current.Response.BinaryWrite(bs);

context.Application[id] = null;

}

}

}

四、 写在最后:

边听着悠扬美妙的音乐、边体验Codes的诗一般的美。

如此而已

Share u opinion

如果你有什么想法,欢迎写下来!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有