C# Asp.Net大文件上传 带进度条

源码下载

在Asp.Net中用SWFUpload上传大文件还是不错的,简单介绍下:SWFUpload最初是由Vinterwebb.se开发的一个客户端的上传工具. 它结合了FLASH和JavaScript的功能,以提供一种超越了传统的浏览器中<input type="file" />标签提供的文件上传功能。

SWFUpload提供的主要功能:

 

  • 在文件选择对话框中能够进行文件多选
  • 页面无刷新的上传
  • 提供上传进度的事件回调,实时显示上传进度
  • 良好的浏览器兼容性
  • 采用了命名空间以兼容其它JS的库 (例如 jQuery, Prototype, 等等)
  • 对FLASH 8和FLASH 9播放器的支持
  • 对FLASH 9和FLASH 10播放器的支持(V2.2.0版本放弃了对Flash 8的支持)

SWFUpload背后的设计思想和其它基于Flash的上传工具是不同的。它将浏览器的中UI交给开发人员来控制。开发人员能够利用XHTML,CSS,Javascript来定制符合他们网站风格的UI上传元素。然后使用它提供的一组简单的JS事件来更新上传状态,开发人员能够利用这些事件来及时更新页面中的上传进度UI。

不幸的是Flash Player 10 更严格的安全机制迫使我们不得不将一个Flash Button放入Flash影片中。SWFUpload提供API供开发者通过图片、文字、CSS的方式来自定制更灵活的UI显示。

  从官网下了个例子,applicationdemo.net是C#的例子,不过CSS文件、Flash和JS文件并不在applicationdemo.net目录下,而在applicationdemo.net的同级目录中,整理一下,然后将文件中的路径改一下就可以了。运行了一下效果还是不错的,是将图片上传到服务器生成缩略图,不过并没有保存在服务上。简单介绍下SwfUpload中js变量和类型:

upload_url:处理上传文件的程序。

file_types:表示要上传的文件类型,多种类型用分号隔开,如:file_types : "*.jpg;*.rar;*.zip" 。

file_size_limit:设置文件选择对话框的文件大小过滤规则,该属性可接收一个带单位的数值,可用的单位有B,KB,MB,GB。如果忽略了单位,那么默认使用KB。特殊值0表示文件大小无限制。

  关于file_size_limit还有一点要说,就是在配置文件中也可以设置文件最大值。如下是针对upload.aspx设置的大小,将location这一层去掉,将是对所有文件的上传大小限制。所以实际上传文件的最大值取决于配置文件和file_size_limit,取两者之间的小值,如果配置文件中未指明,则默认为4MB。有时候报2038错的时候,就是因为文件大小。

  1. <configuration>  
  2.     <location path="upload.aspx">  
  3.         <system.web>  
  4.             <httpRuntime maxRequestLength="2151" executionTimeout="300" />  
  5.         </system.web>  
  6.     </location>  
  7. </configuration>  

File Object:包含了一组可用的文件属性,很多处理事件都会传递一个File Object参数来访问该文件的相关属性。

  1. {   
  2.     id : string,            // SWFUpload控制的文件的id,通过指定该id可启动此文件的上传、退出上传等   
  3.     index : number,         // 文件在选定文件队列(包括出错、退出、排队的文件)中的索引,getFile可使用此索引   
  4.     name : string,          // 文件名,不包括文件的路径。   
  5.     size : number,          // 文件字节数   
  6.     type : string,          // 客户端操作系统设置的文件类型   
  7.     creationdate : Date,        // 文件的创建时间   
  8.     modificationdate : Date,    // 文件的最后修改时间   
  9.     filestatus : number     // 文件的当前状态,对应的状态代码可查看SWFUpload.FILE_STATUS   
  10. }  

  

下面是官网的例子和自己做的应用示例。

  

在刚用swfupload的时候,很是头疼,js错误乱蹦,又不知道什么原因。熟悉了就好多了。下面说一下注意的地方。

  1、看着英文提示总是不舒服,改成中文的。运行一下,坏了,成乱码了,而汉字的文件名却没事,这是编码的事,将Myhandlers.js编码改为utf-8就可以了,方法是用文本文档打开JS文件,另存为,编码选择为utf-8,有时候另存以后是乱码,再用原来拷贝一下,粘过去就可以了。

  2、官网Demo1上传的过程中点取消按钮却没有反应,而其它Demo中的却好用。找了找原因:在Myhandlers.js中的FileProgress写的不够完善,直接删掉,将simpledemo/js/fileprogress.js添加进来就可以了。这时候取消就会报错,将simpledemo/js/handlers.js中的fileQueueError和uploadError拿过来就可以了。

  3、注意显示异常,在调错时很有用。如在js中alert(e),在C#中输出Exception:

  1. catch( Exception ex )   
  2. {   
  3.     // If any kind of error occurs return a 500 Internal Server error   
  4.     Response.StatusCode = 500;   
  5.     Response.Write("An error occured:"+ex.ToString());   
  6.     Response.End();   
  7. }  

 开发环境:VS2005 sp1 Web应用程序+IE7

你可能感兴趣的:(C# Asp.Net大文件上传 带进度条)