【www.gdgbn.com--页面特效】

asp教程.net 文件上传进度条实现代码

index.htm就是文件上传页面,提交form给uploadhandler目录下的default.aspx,以实现文件上传。

progresshandler目录下三个文件为abort.ashx、genericguid.ashx,handler.ashx功能分别为:根据guid取消正在上传的文件,生成guid,根据guid获取上传信息。

第一步:建立index.htm页面,这个上传页面,需要注意的就是需要一个隐藏的iframe,并且名字为form提交的目标。

view code  1
 2
 3  
 4  
 5     asp.net教程 ajax文件上传进度条示例
 6    
 7     css教程" rel="stylesheet" type="text/css" />
 8     <script src="scripts/jquery-1.4.2.min.js" type="text/网页特效"></script>
 9     <script src="scripts/jquery-ui-1.8.2.custom.min.js" type="text/javascript"></script>
10     <script src="scripts/ljq.lib.js" type="text/javascript"></script>
11     <script src="scripts/ajax/guidget.js" type="text/javascript"></script>
12     <script src="scripts/ajax/ajax-progress-upload.js" type="text/javascript"></script>
13  
14  
15    
16         asp.net ajax 文件上传进度条示例
17    


18        
19        

*本程序适合小文件上传,不超过80mb


20        

文件地址


21        
22        

23        

文件描述


24        
25        

26        

27        
28    
29    
30    
31    
32             文件上传
33            
34                
35                    
36                        
  • 正在准备上传...
    37                        
    38                        

  • 39                        

  • 40                        

  • 41                        

  • 42                    
    43                   
    44                
    45                
    46                     取消确定
    47                
    48            
    49    
    50    
    53
    54
    55  
    56  


     

     

     


    第二步,创建generateguid.ashx文件,作用就是生成唯一的guid.

    view code

    第三步,创建default.aspx文件,用于提交表单时上传文件。

    view code  1 using system;
     2  using system.collections.generic;
     3  using system.linq;
     4  using system.web;
     5  using system.web.ui;
     6  using system.web.ui.webcontrols;
     7  /*========================================================================================
     8 *       
     9 *    developed by 李检全
    10 *   
    11 *    date 2011-03-10
    12 *   
    13 *    contact me
    14 *   
    15 *    address 辽宁省大连市开发区辽河西路18号大连民族学院二教631工作室
    16 *   
    17 *    email lijianquan07@gmail.com
    18 *   
    19 *    qq 55643287
    20 *   
    21 *    copyright (c) 李检全 all rights reserved 
    22 *    
    23 * =======================================================================================
    24  */
    25  public partial class uploadhandler_default : system.web.ui.page
    26 {
    27     protected void page_load(object sender, eventargs e)
    28     {
    29         string guid = request.params["guid"];
    30         uploadutil utilhelp = new uploadutil(this, guid);
    31         utilhelp.upload(); 
    32     }
    33 }


     

     

     

    上传核心代码:

    view code   1 using system;
      2  using system.collections.generic;
      3  using system.linq;
      4  using system.web;
      5  using system.io;
      6  using system.configuration;
      7  using system.web.ui;
      8  using system.web.caching;
      9  using system.threading;
     10  /*========================================================================================
     11 *       
     12 *    developed by 李检全
     13 *   
     14 *    date 2011-03-10
     15 *   
     16 *    contact me
     17 *   
     18 *    address 辽宁省大连市开发区辽河西路18号大连民族学院二教631工作室
     19 *   
     20 *    email lijianquan07@gmail.com
     21 *   
     22 *    qq 55643287
     23 *   
     24 *    copyright (c) 李检全 all rights reserved 
     25 *    
     26 * =======================================================================================
     27  */
     28  public class uploadutil
     29 {
     30     private stream reader;
     31     private filestream fstream;
     32     private const int buffersize = 10000;
     33     private string filepath =new page().server.mappath(configurationmanager.apps教程ettings["upload_folder"]);
     34     private page page;
     35     private string guid;
     36     public uploadutil(page page, string guid)
     37     {
     38         this.page = page;
     39         this.guid = guid;
     40     }
     41     public void upload()
     42     {
     43         if (this.page.request.files.count > 0)
     44         {
     45             this.doupload(this.page.request.files[0]);
     46         }
     47         else
     48         {
     49             return;
     50         }
     51     }
     52     private void doupload(httppostedfile postedfile)
     53     {
     54         bool _abort = false;
     55         string _filepath = this.filepath + datetime.now.tofiletime()+"//";
     56         if (!directory.exists(_filepath))
     57         {
     58             directory.createdirectory(_filepath);
     59         }
     60         string _filename = postedfile.filename;
     61         downloadingfileinfo info = new downloadingfileinfo(_filename,postedfile.contentlength,postedfile.contenttype);
     62         object fileobj = httpcontext.current.cache[this.guid];
     63         if (fileobj != null)
     64         {
     65             httpcontext.current.cache.remove(this.guid);
     66         }
     67         httpcontext.current.cache.add(this.guid, info, null, datetime.now.adddays(1), timespan.zero, cacheitempriority.abovenormal, null);
     68         datetime begin=datetime.now.tolocaltime();
     69         fstream = new filestream(_filepath+_filename,filemode.create);
     70         reader = postedfile.inputstream;
     71         byte []buffer=new byte[buffersize];
     72         int len = reader.read(buffer,0,buffersize);
     73
     74         while (len > 0&&!_abort)
     75         {
     76             fstream.write(buffer,0,len);
     77             datetime end = datetime.now.tolocaltime();
     78             info.costtime = (long)(end - begin).totalmilliseconds;
     79             info.filefinished += len;
     80
     81             //模拟延时用,实际应用的时候注销他
     82              thread.sleep(10);
     83
     84             httpcontext.current.cache[this.guid] = info;
     85             _abort=((downloadingfileinfo)httpcontext.current.cache[this.guid]).abort;
     86             len = reader.read(buffer,0,buffersize);
     87         }
     88      
     89         reader.close();
     90         fstream.close();
     91         if (_abort)
     92         {
     93             if (file.exists(_filepath + _filename))
     94             {
     95                 file.delete(_filepath + _filename);
     96             }
     97         }
     98     }
     99    
    100 }


     

     

     

    第四步,创建handler.ashx文件,用于查看文件上传情况。

    view code  1 <%@ webhandler language="c#" class="handler" %>
     2
     3  using system;
     4  using system.web;
     5  using system.xml.linq;
     6  using system.web.caching;
     7  /*========================================================================================
     8 *       
     9 *    developed by 李检全
    10 *   
    11 *    date 2011-03-10
    12 *   
    13 *    contact me
    14 *   
    15 *    address 辽宁省大连市开发区辽河西路18号大连民族学院二教631工作室
    16 *   
    17 *    email lijianquan07@gmail.com
    18 *   
    19 *    qq 55643287
    20 *   
    21 *    copyright (c) 李检全 all rights reserved 
    22 *    
    23 * =======================================================================================
    24  */
    25  public class handler : ihttphandler {
    26    
    27     public void processrequest (httpcontext context) {
    28         context.response.contenttype = "application/xml";
    29         context.response.charset = "utf-8";
    30         string guid = context.request.form["guid"];
    31         downloadingfileinfo info = context.cache[guid] as downloadingfileinfo;
    32         xdocument doc = new xdocument();
    33         xelement root = new xelement("root");
    34         if (info != null)
    35         {
    36             xelement filename = new xelement("filename", info.filename);
    37             xelement filefinished = new xelement("filefinished", info.filefinished);
    38             xelement filesize = new xelement("filesize", info.filesize);
    39             xelement costtime = new xelement("costtime", info.costtime);
    40             xelement filestate = new xelement("filestate", info.filestate);
    41             xelement speed = new xelement("speed",info.speed);
    42             xelement percent = new xelement("percent",info.percent);
    43             xelement abort = new xelement("abort",false);
    44             root.add(filename);
    45             root.add(filefinished);
    46             root.add(filesize);
    47             root.add(costtime);
    48             root.add(filestate);
    49             root.add(speed);
    50             root.add(percent);
    51             if (info.abort)
    52             {
    53                 abort.value = info.abort.tostring();
    54                 context.cache.remove(guid);
    55             }
    56             if (info.filestate == "finished")
    57             {
    58                 context.cache.remove(guid);
    59             }
    60            
    61            
    62         }
    63         else
    64         {
    65             xelement none = new xelement("none","no file");
    66             root.add(none);
    67         }
    68         doc.add(root);
    69         context.response.write(doc.tostring());
    70         context.response.end();
    71     }
    72 
    73     public bool isreusable {
    74         get {
    75             return false;
    76         }
    77     }
    78
    79 }


     

     

     

    第五步,创建abort.ashx文件,用于取消上传。

    view code  1 <%@ webhandler language="c#" class="abort" %>
     2
     3  using system;
     4  using system.web;
     5  using system.xml.linq;
     6  /*========================================================================================
     7 *       
     8 *    developed by 李检全
     9 *   
    10 *    date 2011-03-10
    11 *   
    12 *    contact me
    13 *   
    14 *    address 辽宁省大连市开发区辽河西路18号大连民族学院二教631工作室
    15 *   
    16 *    email lijianquan07@gmail.com
    17 *   
    18 *    qq 55643287
    19 *   
    20 *    copyright (c) 李检全 all rights reserved 
    21 *    
    22 * =======================================================================================
    23  */
    24
    25  public class abort : ihttphandler {
    26    
    27     public void processrequest (httpcontext context) {
    28         context.response.contenttype = "application/xml";
    29         context.response.charset = "utf-8";
    30         string guid = context.request.form["guid"];
    31         bool abort = string.isnullorempty(context.request.form["abort"]) ? false : true;
    32         downloadingfileinfo info = context.cache[guid] as downloadingfileinfo;
    33         if (info != null)
    34         {
    35             info.abort = abort;
    36             context.cache[guid] = info;
    37         }
    38         xdocument doc = new xdocument();
    39         xelement root = new xelement("root");
    40         xelement flag = new xelement("flag",info==null?"false":"true");
    41         root.add(flag);
    42         doc.add(root);
    43         context.response.write(doc.tostring());
    44         context.response.end();
    45     }
    46 
    47     public bool isreusable {
    48         get {
    49             return false;
    50         }
    51     }
    52
    53 }


     

     

     


    好了,下面就是编写javascript脚本了,我引用了jquery这个框架,另外还用了ui框架。

    核心代码是ajax-progress-upload.js文件,另外还有一个获取guid的文件。

    view code   1 /*========================================================================================
      2 *       
      3 *    developed by 李检全
      4 *   
      5 *    date 2011-03-10
      6 *   
      7 *    contact me
      8 *   
      9 *    address 辽宁省大连市开发区辽河西路18号大连民族学院二教631工作室
     10 *   
     11 *    email lijianquan07@gmail.com
     12 *   
     13 *    qq 55643287
     14 *   
     15 *    copyright (c) 李检全 all rights reserved 
     16 *    
     17 * =======================================================================================
     18  */
     19 $(document).ready(function () {
     20     var _guid_url = "progresshandler/generateguid.ashx";
     21     var _progress_url = "progresshandler/handler.ashx";
     22     var _abort_url = "progresshandler/abort.ashx";
     23     var _target = "#guid";
     24     var _guid = "";
     25     var _cancel = false;
     26     var _timer;
     27     ljq.setguid(_target, _guid_url);
     28     $("#upload_panel").draggable({ handle: "#upload_title" });
     29     $("#upload_choose span").hover(function () {
     30         $(this).css({
     31             "color": "#f6af3a",
     32             "border": "1px solid #e78f08"
     33         });
     34     }, function () {
     35         $(this).css({
     36             "color": "#1c94cd",
     37             "border": "1px solid #ddd"
     38         });
     39     });
     40     $("#upload_cancel").click(function () {
     41         $.ajax({
     42             url: _abort_url,
     43             data: { guid: _guid, abort: true },
     44             datatype: "xml",
     45             type: "post",
     46             success: function () {
     47
     48                 $("#upload_panel").fadeout("fast");
     49                 $("#back_panel").fadeout(1000);
     50                 window.clearinterval(_timer);
     51             }
     52         });
     53
     54
     55     });
     56     $("#upload_submit").click(function () {
     57         $("#upload_panel").fadeout("fast");
     58         $("#back_panel").fadeout("1000");
     59     });
     60     $("form").submit(function () {
     61         _guid = $(_target).val();
     62         if ($("input[name="upload_file"]").val() == "") {
     63             alert("未指定上传文件!");
     64             return false;
     65         }
     66         $("#upload_progress").css("width", "0%");
     67         $("#finished_percent").html("准备上传...");
     68         $("#upload_speed").html("");
     69         $("#upload_filename").html("");
     70         $("#upload_filesize").html("");
     71         $("#upload_costtime").html("");
     72         var _option = {
     73             url: _progress_url,
     74             data: { guid: _guid },
     75             datatype: "xml",
     76             type: "post",
     77             beforesend: function () {
     78                 $("#back_panel").fadeto("fast", "0.5");
     79                 $("#upload_panel").fadein("1000");
     80             },
     81             success: function (response) {
     82
     83                 if ($(response).find("root abort").text() == "true") {
     84                     $("#upload_panel").fadeout("fast");
     85                     $("#back_panel").fadeout(1000);
     86                     window.clearinterval(_timer);
     87                 }
     88
     89                 else if ($(response).find("root none").text() == "no file") {
     90
     91                 }
     92                 else {
     93                     var _percent = ($(response).find("root percent").text() * 100);
     94                     var _speed = $(response).find("root speed").text();
     95                     var _filesize = $(response).find("root filesize").text();
     96                     var _upload_costtime = $(response).find("root costtime").text();
     97                     if (parseint(_speed) < 1024) {
     98                         _speed = ljq.tofix(_speed) + "kb";
     99                     } else {
    100                         _speed = ljq.tofix(_speed / 1024) + "mb";
    101                     }
    102
    103                     if (parseint(_filesize) / 1024 < 1024) {
    104                         _filesize = ljq.tofix(_filesize / 1024) + "kb";
    105                     } else if (parseint(_filesize) / 1024 / 1024 < 1024) {
    106                         _filesize = ljq.tofix(_filesize / 1024 / 1024) + "mb";
    107                     } else {
    108                         _filesize = ljq.tofix(_filesize / 1024 / 1024 / 1024) + "gb";
    109                     }
    110
    111                     if (_upload_costtime < 1000) {
    112                         _upload_costtime = _upload_costtime + "毫秒";
    113                     } else if (_upload_costtime / 1000 < 60) {
    114                         _upload_costtime = parseint(_upload_costtime / 1000) + "秒" + _upload_costtime % 1000 + "毫秒";
    115                     } else {
    116                         _upload_costtime = parseint(_upload_costtime / 1000 / 60) + "分" + parseint((_upload_costtime % 60000) / 1000) + "秒" + _upload_costtime % 1000 + "毫秒";
    117                     }
    118                     $("#upload_progress").css("width", parseint(_percent) + "%");
    119                     $("#finished_percent").html("完成百分比:" + ljq.tofix(_percent) + "%");
    120                     $("#upload_speed").html("上传速度:" + _speed + "/sec");
    121                     $("#upload_filename").html("文件名称:" + $(response).find("root filename").text());
    122                     $("#upload_filesize").html("文件大小:" + _filesize);
    123                     $("#upload_costtime").html("上传耗时:" + _upload_costtime);
    124                     if (_percent >= 100) {
    125
    126                         window.clearinterval(_timer);
    127                         $("#finished_percent").html("文件上传完成");
    128                     }
    129                     if (_cancel) {
    130                         window.clearinterval(_timer);
    131                     }
    132                 }
    133
    134             },
    135             error: function () { }
    136         };
    137
    138         _timer = window.setinterval(function () { $.ajax(_option); }, 1000);
    139
    140     });
    141
    142 });


     

     

     


    view code  1 /*========================================================================================
     2 *       
     3 *    developed by 李检全
     4 *   
     5 *    date 2011-03-10
     6 *   
     7 *    contact me
     8 *   
     9 *    address 辽宁省大连市开发区辽河西路18号大连民族学院二教631工作室
    10 *   
    11 *    email lijianquan07@gmail.com
    12 *   
    13 *    qq 55643287
    14 *   
    15 *    copyright (c) 李检全 all rights reserved 
    16 *    
    17 * =======================================================================================
    18  */
    19 (function () {
    20     if (!window["ljq"]) {
    21         window["ljq"] = {};
    22     }
    23     function setguid(target, url) {
    24         var _option = {
    25             url: url,
    26             datatype: "xml",
    27             type: "post",
    28             success: function (response) {
    29                 $(target).val($(response).find("root guid").text());
    30             }
    31         };
    32         $.ajax(_option);
    33     }
    34     window["ljq"]["setguid"] = setguid;
    35     function getprogress(guid) {
    36         var _option = {};
    37     }
    38 })();

    好了

     

    本文来源:http://www.gdgbn.com/wangyetexiao/29390/