柔情似水 发表于 2015-1-16 22:21:27

ASP.NET编程:ASP.NET实例:无革新的文件上传

也许唯一可以让世人留恋Java的理由就剩下它的王牌——跨平台。</p>程序申明
【upload】
程序中最主要的办法就是upload了,挪用它就能够举行无革新上传。upload的历程是如许的,起首用stop办法中断上一次上传,并判别是不是选择文件。然后分离挪用_setIframe,_setForm和_setInput,天生必要的iframe,form和input。假如设置了timeout属性的话,会主动设置计时器:
以下为援用的内容:
if(this.timeout>0){
this._timer=setTimeout($$F.bind(this._timeout,this),this.timeout*1000);
}
ps:经测试,小于0的延不时间,ie会作废实行,而其他扫瞄器会当做0实行。
程序有一个_sending属性用来判别上传形态。在stop(中断),remove(移除),_finis(完成),_timeout(超时)中会把它设为false。而在上传入手下手前要把它设置为true。最初提交表单就入手下手上传了。
【iframe】
程序利用_setIframe函数来创立无革新必要的iframe。因为ie中iframe的name不克不及修正的成绩,要如许创立iframe:
以下为援用的内容:
variframename="QUICKUPLOAD_"+QuickUpload._counter++,
iframe=document.createElement($$B.ie?"<iframename=""+iframename+"">":"iframe");
iframe.name=iframename;
iframe.style.display="none";
ps:关于iframe的name的成绩参考这里的iframe部分。ie8已能够修正name了,但在非尺度(怪辟)形式下仍是不克不及修正。个中利用了一个QuickUpload函数本身的_counter属性做盘算器,这就可以包管各个实例的iframe的name就不会反复。
为了能在文件上传完成后实行回调函数,会在iframe的onload中实行_finish函数:
以下为援用的内容:
varfinish=this._fFINISH=$$F.bind(this._finish,this);
if($$B.ie){
iframe.attachEvent("onload",finish);
}else{
iframe.onload=$$B.opera?function(){this.onload=finish;}:finish;
}
在ie必要用attachEvent来绑定onload,由于在ie中间接设置onload是有效的。除用attachEvent还能够用onreadystatechange取代。至于缘故原由我也不分明,具体参考“判别iframe是不是加载完成的完善办法”。
iframe的加载另有一个成绩,测试以下代码:
以下为援用的内容:
<body><divid="msg">形态:</div></body>
<script>
varmsg=document.getElementById("msg");
variframe=document.createElement("iframe");
iframe.onload=function(){msg.innerHTML+="onload,";}
document.body.appendChild(iframe);
iframe.src="http://cloudgamer.cnblogs.com/"
</script>
了局safari,chrome城市触发onload两次,而opera,ff和ie(请自行兼容)都是1次。
估量在safari和chrome在appendChild以后就举行第一次加载,而且在设置src之前加载终了,以是触发了两次。假如在拔出body之前给iframe任意设置一个src(除空值),直接加长第一次加载,那末也只触发一次了。ps:不设置或空值的src相称于链接到“about:blank”(空缺页)。
那末opera,ff和ie多是第一次加载太慢,第二次掩盖了第一次的,以是只触发了一次onload。ps:也多是其他缘故原由,比方扫瞄器优化之类的,我也不断定。
针对加载过快的成绩,能够在onload的时分依据_sending断定之前是不是上传形态来办理。固然没测试出来,会不会有_sending设置以后submit之前恰好触发第一次onload的情形呢?
针对这个成绩,在upload办法中会把_sending放在submit以后设置。那假如在submit以后_sending设置之前就触发了onload呢?(...澹┱飧銮榭龌静换岢鱿郑绻娴某鱿郑桶_sending设置放到submit后面吧。
opera另有一个贫苦的成绩,测试上面代码:
以下为援用的内容:
<body>
<divid="msg">形态:</div>
<formaction="http://cloudgamer.cnblogs.com/"target="ifr">
</form>
</body>
<script>
varmsg=document.getElementById("msg");
variframe=document.createElement("iframe");
iframe.name="ifr";
iframe.onload=function(){msg.innerHTML+="onload,";}
document.body.appendChild(iframe);
msg.innerHTML+="submit,";
document.forms.submit();
</script>
ie和ff显现submit,onload,safari和chrome显现的是onload,submit,onload,跟下面的剖析分歧。而opera却显现submit,onload,onload,两次onload都是在submit以后触发的。这个情形就不克不及纯真用_sending来办理了。是否是submit不克不及使iframe作废加载呢?在appendChild之前设一个src,了局一般的只触发onload一次,看来是能够的啊。
固然不晓得缘故原由,举措仍是有的,一个是appendChild前设一个src,还能够在第一次onload中从头设置onload,像程序那样。但这两个办法都存在不断定性,不克不及完整办理成绩,但也找不到更好的办法了。
ff的onload另有一个成绩,在呈现ERROR_INTERNET_CONNECTION_RESET(文件巨细凌驾服务器限定)之类的服务器毛病时,即便加载完成也不会触发onload,临时找不到办理举措。
iframe有一个缺点是只能用onload判别加载完成,但没有举措判别是不是加载乐成。没有相似XMLHTTP的status的器材,赶上404之类的毛病也没举措辨别出来。在利用时要做好这方面的处置,比方申明同意上传文件巨细,超不时间,怎样处置长工夫无呼应等。
<p>你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:)

透明 发表于 2015-1-18 09:46:01

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

若天明 发表于 2015-1-21 17:00:36

ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。

山那边是海 发表于 2015-2-6 16:03:48

通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。

简单生活 发表于 2015-2-17 01:33:00

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

乐观 发表于 2015-3-5 14:47:09

Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!

蒙在股里 发表于 2015-3-12 08:13:22

最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。

只想知道 发表于 2015-3-19 19:14:44

ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
页: [1]
查看完整版本: ASP.NET编程:ASP.NET实例:无革新的文件上传