All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
如何在十天学内会php之第三天_[PHP教程]
制作WEB在线编辑器-插入HTML标签_.net资料_编程技术
一组,ASP.NET,2.0,主题文件下载_[Asp.Net教程]
sql之组合条件和布尔运算符_[SQL,Server教程]
ASP.NET技巧:Session丢失原因与解决方案小结_.net资料_编程技术
用PHP程序直接调用文本文件内容分析_php资料_编程技术
学习动态网页技术PHP中错误处理的一些方法_php资料_编程技术
配置文件中PHP最常用四个ini函数_[PHP教程]
php语言中switch的用法介绍_[PHP教程]
ASP.NET程序上传文件功能的具体实例代码_[Asp.Net教程]
Reading number is top 10 pictures
Japan sexy beauty passion photo
Sora aoi calligraphy show
Play for Free show breast in a world of ice and snow
Take you to walk into the most true north Korea rural4
Sexy women in 2013--1
怀春少女-石一伊
Chinese paper-cut grilles art appreciation5
Plump, too plump!2
The Soviet union swimsuit exposure in the 70 year2
清扫五脏垃圾,我有绝招
Download software ranking
圣殿祭司的ASP.NET.2.0.开发详解-使用C#
Tram sex maniac 2 (H) rar bag1
虚拟机汉化软件
功夫熊猫2(下集)
The Bermuda triangle1
网络管理员第三版
C语言教程TXT
The hero
Tram sex maniac 2 (H) rar bag5
双旗镇刀客A
归海一刀 published in(发表于) 2014/1/30 1:20:34 Edit(编辑)
Asp.NET大文件上传开发总结(一)_[Asp.Net教程]

Asp.NET大文件上传开发总结(一)_[Asp.Net教程]

Asp.NET大文件上传开发总结(一)_[Asp.Net教程]

以前开发过一个用Asp.NET上传大文件的代码,由于是在NET1.1下开发的,发现不能在NET.20下运行,前几天将这个问题解决了,现在把整个开发过程整理一下,供大家参考。由于内容较多,所以我打算分成六篇来写,第一篇写一下需要解决的问题和大致解决思路,再用四篇具体写一下开发中需要解决的四个主要问题,最后再写一个组件的使用方法。


大家可以点击这里下载NET1.1的源代码。



  • 1、 问题提出:

使用Asp.NET在上传文件时,IIS接收到请求内容后,发送到Asp.NET的管道中,然后Asp.NET的ISAPI将读取的内容是全部装入服务器内存(NET2.0在请求内容较大时,会存放到临时文件中,见后面的开发说明),在上传文件时,消耗服务器资源较多,所以Asp.NET对上传文件的大小会有限制,且不能提供上传进度显示。而我们在实际应用中,往往会上传较大的文件的现象,这时,可以通过修改配置文件将最大将求长度配置设置得很大,但这样,服务器将会消耗大量内存。


为此,如果可以在IIS将客户端发送的内容发送到Asp.NET的管道时,随着服务器接收内容的同时,将文件内容写到服务器磁盘中,然后在Asp.NET的管道中只放入请求的对应的Form内容。这样可以避开Asp.NET上传文件的大小限制,同时提供服务器接收进度显示。



  • 2、 解决方案分析:

Asp.NET提供了HttpModule功能,提供了让用户处理客户请求的手段,要实现HttpModule功能,用户只需实现System.Web.IHttpModule接口。System.Web.IHttpModule定义了两个方法void Init (HttpApplication context)和void Dispose (),Init方法给我们提供了一个类型为HttpApplication的参数,这个HttpApplication类型中,给我们提供了处理Asp.NET页面生命周期中发生的各种事件(具体请参照MSDN),我们只需要在最早的事件BeginRequest中,处理数据接收,就可以避开Asp.NET的最大请求长度限制。


为了不改变Asp.NET对页面处理逻辑,我们需要在提供文件内容后,将其它请求内容正确封装给Asp.NET,为此我们需要分析客户端发送到服务器端内容的具体格式,我们可以通过其它工具,提供这些内容,这些内容大致如下:


-----------------------------7d81e441d025c


Content-Disposition: form-data; name="UploadID"



de858d87-e8b8-4f7a-a832-357da2efdf13


-----------------------------7d81e441d025c


Content-Disposition: form-data; name="__VIEWSTATE"



/wEPDwULLTIwODE1OTkzNTUPZBYCAgMPFgIeB2VuY3R5cGUFE211bHRpcGFydC9mb3JtLWRhdGFkZAQ0pcd9kiSZ7/MOe0enKOTGFxMk


-----------------------------7d81e441d025c


Content-Disposition: form-data; name="TextBox1"




-----------------------------7d81e441d025c


Content-Disposition: form-data; name="TextBox2"




-----------------------------7d81e441d025c


Content-Disposition: form-data; name="file1"; filename="C:\Documents and Settings\Administrator\??????\componentart.web.ui.rar"


Content-Type: application/x-rar-compressed



Rar! ??s这里我把文件具体内容去掉了,我们提取文件后,封送给Asp.NET也就是去掉这部分后的内容


-----------------------------7d81e441d025c


Content-Disposition: form-data; name="Button1"



开始上传


-----------------------------7d81e441d025c


Content-Disposition: form-data; name="__EVENTVALIDATION"



/wEWBAL1w7VGAuzRsusGAuzR9tkMAoznisYGMJIxZyapejeOQaIIwcOkPrWK6nE=


-----------------------------7d81e441d025c--


请注意红色注释部分,那里原来是上传的文件内容,我们封送给Asp.NET就应当时去掉文件内容后内容,这样,页面控件的值、页面事件就会正确的发送到Asp.NET页面。只是页面不能正确获取上传文件的内容。


这里又出现了三个问题:一是:我们如何获取文件内容,如何确定那部分内容是上传的文件内容而不是页面其它控件内容;二是:我们如何在提取文件内容后让Asp.NET页面正确获取文件;三是:我们如何将改写后的内容封送给Asp.NET,让它感觉不到我们提取了文件内容。


只要解决了上面三个问题,那大文件上传的问题就解决了,最后就是提供进度显示,由于内容较多,我分四部分来介绍这三个问题和进度显示。


待续...

来源:http://www.cnblogs.com/bashan







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.