网站程序上传到服务器方法汇总(3)
作者:行云止水 来源:网页教学网 发布时间:2008-01-26 19:52:00
二、利用RFC1867标准处理文件上传的两种方式:
1.一次性得到上传的数据,然后分析处理。
看了N多代码之后发现,目前无组件程序和一些COM组件都是使用Request.BinaryRead方法。一次性得到上传的数据,然后分析处理。
这就是为什么上传大文件很慢的原因了,IIS超时不说,就算几百M文件上去了,分析处理也得一阵子。
2.一边接收文件,一边写硬盘。
了解了一下国外的商业组件,比较流行的有Power-Web,AspUpload,ActiveFile, ABCUpload,aspSmartUpload,SA-FileUp。其中比较优秀的是ASPUPLOAD和SA-FILE,他们号称可以处理2G的文件(SA-FILE EE版甚至没有文件大小的限制),而且效率也是非常棒,难道编程语言的效率差这么多?查了一些资料,觉得他们都是直接操作文件流。
这样就不受文件大小的制约。但老外的东西也不是绝对完美,ASPUPLOAD处理大文件后,内存占用情况惊人。1G左右都是稀松平常。至于SA-FILE虽然是好东西但是破解难寻。然后发现2款.NET上传组件,Lion.Web.UpLoadModule 和 AspnetUpload也是操作文件流。但是上传速度和CPU占用率都不如老外的商业组件。
做了个测试,LAN内传1G的文件。ASPUPLOAD上传速度平均是4.4M/s,CPU占用10-15,内存占用700M。SA-FILE也差不多这样。而AspnetUpload最快也只有1.5M/s,平均是700K/s,CPU占用15-39,测试环境: PIII800,256M内存,100M LAN。我想AspnetUpload速度慢是可能因为一边接收文件,一边写硬盘。资源占用低的代价就是降低传输速度。但也不得不佩服老外的程序,CPU占用如此之低.....。
三、ASP.NET上传文件遇到的问题
我们在用ASP.NET上传大文件时都遇到过这样或那样的问题。设置很大的maxRequestLength值并不能完全解决问题,因为ASP.NET会block直到把整个文件载入内存后,再加以处理。实际上,如果文件很大的话,我们经常会见到Internet Explorer显示 "The page cannot be displayed - Cannot find server or DNS Error",好像是怎么也catch不了这个错误。为什么?因为这是个client side错误,server side端的Application_Error是处理不到的。
四、ASP.NET大文件上传解决方案
解决的方法是利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据。Chris Hynes为我们提供了这样的一个方案(用HttpModule),该方案除了允许你上传大文件外,还能实时显示上传进度。
Lion.Web.UpLoadModule和AspnetUpload 两个.NET组件都是利用的这个方案。
方案原理:
利用HttpHandler实现了类似于ISAPI Extention的功能,处理请求(Request)的信息和发送响应(Response)。
方案要点:
1. httpHandler or HttpModule
a.在asp.net进程处理request请求之前截获request对象
b.分块读取和写入数据
c.实时跟踪上传进度更新meta信息
2. 利用隐含的HttpWorkerRequest用它的GetPreloadedEntityBody 和 ReadEntityBody方法处理文件流
IServiceProvider provider = (IServiceProvider) HttpContext.Current;
HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));
byte[] bs = wr.GetPreloadedEntityBody();
....
if (!wr.IsEntireEntityBodyIsPreloaded())
{
int n = 1024;
byte[] bs2 = new byte[n];
while (wr.ReadEntityBody(bs2,n) >0)
{
.....
}
}
3. 自定义Multipart MIME 解析器。
自动截获MIME分割符。将文件分块写如临时文件。实时更新Appliaction 状态(ReceivingData, Error, Complete) 。
猜你喜欢
- 1、服务器处理器主频服务器处理器主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。CPU的主频=外频×倍频系数。很多人认为主频就决定
- 第一阶段 此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。 第二阶段 此阶段能精
- 北京时间4月30日消息,据国外媒体报道,微软近日证实,另一家知名软件开发商Adobe Photoshop软件部门首席架构师马克·哈姆伯格(M
- 以下是我的一些经验,希望对你有用,但你要知道,绝对的安全是没有的。这才是一个网管存在的理由。所以。未雨绸缪是件好事。但亡羊补牢也不是下策。请
- 11月14日消息,微软今天表示,其调查证实,旨在帮助用户更方便地在上网本上安装Windows 7的Windows USB/DVD Tool确
- 相信大家都知道用 WordPress 搭建的博客,如果作者的主题没有考虑到网站优化方面的情况,那么使用这样的主题之后会非常的不利于搜索引擎的
- 昨天看到有朋友说用tar包安装的vsftp不能用本地用户登录,感觉十分诧异。但自己也仅做过rpm的,所以没有发言权。今天在自己机器上用tar
- 什么是SPF就是Sender Policy Framework。SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。当你定义了你
- 国外站点网页访问速度慢,但下载速度令人非常满意,这到底是什么原因呢?至于美国站点访问慢就不用说了,但下载速度Blinux曾请人做过测试,速度
- 从来不怀疑,国内互联网对于概念的炒作能力,在炒作这点上,国内互联网的功力甚至已经超越了娱乐圈,娱乐圈炒作的内容虽然不见得是实事,但炒作的对象
- Serv-u Ftp server(以下简称Serv-u)是一个应用比较广泛的Ftp Server,功能强大,使用方便,Serv-u>
- IIS Web服务器安全加固步骤:步骤安装和配置 Windows Server 2003。注意:1.将\System32\cmd.exe转移
- Apache是运行在Linux操作系统上的头号Web服务器。很多小地方都可以用来调整Apache的性能,并降低它对系统资源的影响。其中一个就
- 今天,我们很高兴地告诉大家 Google(谷歌)发布了针对中文用户的谷歌视频搜索。通过谷歌视频搜索,大家可以方便地搜索众多的中文视频,找到自
- 10月27日晨,央视新闻以《钓鱼网站猖獗三种钓法需注意》为题报道了近期日益猖獗的钓鱼网站诈骗案件,新闻提及,目前全国遭受钓鱼网站最严重的是工
- 我在阿里妈妈上看到一个站长说李彦红根本没把阿里妈妈放在眼里,我们先不去说李彦红有没有讲过这句话,就这句话对于现在而言可以说是成立的。阿里妈妈
- 无论是做什么事情,有一颗平常心是非常必要的。但是往往很少有人做到,于是做到的人成功了,更多的人在成功的门外徘徊不前。当然对于成功,不同人有不
- 博客程序从Z-blog到WordPress的转换过程全纪录:1.前期准备网站未做,空间先找。我曾考虑过国外主机,由于有被墙的风险,访问速度也
- 我不想唱衰谷歌,因为客观上我们需要谷歌这样一家公司来平衡自信心过度膨胀的百度。李开复在谷歌的四年时间不算特别出彩,但是谷歌的市场占有率实现了