ASP.NET网站制作之ASP.NET 使用中年夜文件上传研讨
如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着Java嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。asp.net|上传 在项目中常常要用到了年夜文件上传,要上传的文件有100多m,因而研讨如今国际利用的年夜文件上传的组件发明用的对照多的有两个控件AspnetUpload2.0和Lion.Web.UpLoadModule,两个控件的办法是:使用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody办法从IIS为ASP.NET创建的pipe里分块读取数据。ChrisHynes为我们供应了如许的一个计划(用HttpModule),该计划除同意你上传年夜文件外,还能及时显现上传进度。Lion.Web.UpLoadModule和AspnetUpload两个.NET组件都是使用的这个计划。
当上传单文件时,两个软件的办法是一样的,承继HttpModule
HttpApplicationapplication1=senderasHttpApplication;
HttpWorkerRequestrequest1=(HttpWorkerRequest)((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest));
try
{
if(application1.Context.Request.ContentType.IndexOf("multipart/form-data")<=-1)
{
return;
}
//CheckTheHasEntityBody
if(!request1.HasEntityBody())
{
return;
}
intnum1=0;
TimeSpanspan1=DateTime.Now.Subtract(this.beginTime);
stringtext1=application1.Context.Request.ContentType.ToLower();
byte[]buffer1=Encoding.ASCII.GetBytes(("
--"+text1.Substring(text1.IndexOf("boundary=")+9)).ToCharArray());
intnum2=Convert.ToInt32(request1.GetKnownRequestHeader(11));
Progressprogress1=newProgress();
application1.Context.Items.Add("FileList",newHashtable());
byte[]buffer2=request1.GetPreloadedEntityBody();
num1+=buffer2.Length;
stringtext2=this.AnalysePreloadedEntityBody(buffer2,"UploadGUID");
if(text2!=string.Empty)
{
application1.Context.Items.Add("LionSky_UpLoadModule_UploadGUID",text2);
}
boolflag1=true;
if((num2>this.UpLoadFileLength())&&((0>span1.TotalHours)||(span1.TotalHours>3)))
{
flag1=false;
}
if((0>span1.TotalHours)||(span1.TotalHours>3))
{
flag1=false;
}
stringtext3=this.AnalysePreloadedEntityBody(buffer2,"UploadFolder");
ArrayListlist1=newArrayList();
RequestStreamstream1=newRequestStream(buffer2,buffer1,null,RequestStream.FileStatus.Close,RequestStream.ReadStatus.NoRead,text3,flag1,application1.Context,string.Empty);
list1.AddRange(stream1.ReadBody);
if(text2!=string.Empty)
{
progress1.FileLength=num2;
progress1.ReceivedLength=num1;
progress1.FileName=stream1.OriginalFileName;
progress1.FileCount=((Hashtable)application1.Context.Items["FileList"]).Count;
application1.Application["_UploadGUID_"+text2]=progress1;
}
if(!request1.IsEntireEntityBodyIsPreloaded())
{
byte[]buffer4;
ArrayListlist2;
intnum3=204800;
byte[]buffer3=newbyte;
while((num2-num1)>=num3)
{
if(!application1.Context.Response.IsClientConnected)
{
this.ClearApplication(application1);
}
num3=request1.ReadEntityBody(buffer3,buffer3.Length);
num1+=num3;
list2=stream1.ContentBody;
if(list2.Count>0)
{
buffer4=newbyte;
list2.CopyTo(buffer4,0);
buffer3.CopyTo(buffer4,list2.Count);
stream1=newRequestStream(buffer4,buffer1,stream1.FileStream,stream1.FStatus,stream1.RStatus,text3,flag1,application1.Context,stream1.OriginalFileName);
}
else
{
stream1=newRequestStream(buffer3,buffer1,stream1.FileStream,stream1.FStatus,stream1.RStatus,text3,flag1,application1.Context,stream1.OriginalFileName);
}
list1.AddRange(stream1.ReadBody);
if(text2!=string.Empty)
{
progress1.ReceivedLength=num1;
progress1.FileName=stream1.OriginalFileName;
progress1.FileCount=((Hashtable)application1.Context.Items["FileList"]).Count;
application1.Application["_UploadGUID_"+text2]=progress1;
}
}
buffer3=newbyte;
if(!application1.Context.Response.IsClientConnected&&(stream1.FStatus== RequestStream.FileStatus.Open))
{
this.ClearApplication(application1);
}
num3=request1.ReadEntityBody(buffer3,buffer3.Length);
list2=stream1.ContentBody;
if(list2.Count>0)
{
buffer4=newbyte;
list2.CopyTo(buffer4,0);
buffer3.CopyTo(buffer4,list2.Count);
stream1=newRequestStream(buffer4,buffer1,stream1.FileStream,stream1.FStatus,stream1.RStatus,text3,flag1,application1.Context,stream1.OriginalFileName);
}
else
{
stream1=newRequestStream(buffer3,buffer1,stream1.FileStream,stream1.FStatus,stream1.RStatus,text3,flag1,application1.Context,stream1.OriginalFileName);
}
list1.AddRange(stream1.ReadBody);
if(text2!=string.Empty)
{
progress1.ReceivedLength=num1+buffer3.Length;
progress1.FileName=stream1.OriginalFileName;
progress1.FileCount=((Hashtable)application1.Context.Items["FileList"]).Count;
if(flag1)
{
progress1.UploadStatus=Progress.UploadStatusEnum.Uploaded;
}
else
{
application1.Application.Remove("_UploadGUID_"+text2);
}
}
}
byte[]buffer5=newbyte;
list1.CopyTo(buffer5);
this.PopulateRequestData(request1,buffer5);
}
catch(Exceptionexception1)
{
this.ClearApplication(application1);
throwexception1;
}实不相瞒,Java是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,Java的耗时是.NET的5倍。 可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。 PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。 在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。 由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。 大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。 Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
页:
[1]