zoukankan      html  css  js  c++  java
  • 大文件上传进度条显示

    浏览-选择文件-点击 “上传 ”后,效果如下:

      弹出透明UI遮罩层 并显示上传这个过程 我这里设置太透明了 效果不是很立体

    文件结构如图:

     说明:用到“高山来客”的大文件上传组件 http://www.cnblogs.com/bashan/archive/2008/05/23/1206095.html

      以及Newtonsoft.Json.dll Json字符串反序列化为对象 http://james.newtonking.com/projects/json-net.aspx

      jquery.blockUI.js 弹出透明遮罩层 http://malsup.com/jquery/block/

      jquery.form.js   表单验证Ajax提交 

      

      HTML:

     1 <form id="uploadForm" runat="server" enctype="multipart/form-data"> 
     2  <div id="uploadfield" style="600px; height:500px"> 
     3   <input id="File1" type="file" runat="server" /> 
     4   <asp:Button ID="Button1" runat="server" Text="上传" onclick="Button1_Click" /> 
     5   <p>文件上传进度条</p> 
     6   <p>文件上传进度条</p> 
     7   <p>文件上传进度条</p> 
     8   <p>文件上传进度条</p> 
     9   <p>文件上传进度条</p> 
    10   <p>文件上传进度条</p> 
    11    <p>文件上传进度条</p> 
    12   </div>         
    13  <div id="ui" style="display:none" >  
    14   <div id="output" > </div>   
    15   <div id="progressbar"class="ui-progressbar ui-widget ui-widget-content ui-corner-all" style="296px; height:20px;"></div> 
    16   <input id="btn_cancel" type="button" value="取消上传" /> 
    17  </div> 
    18 </form>
    View Code

     js:

     1 var inte; 
     2 $(function() { 
     3 $('#uploadForm').submit(function() { 
     4   return false; 
     5 }); 
     6  
     7 $('#uploadForm').ajaxForm({ //这里调用jquery.form.js表单注册方法 
     8   beforeSubmit: function(a, f, o) {//提交前的处理 
     9     o.dataType = "json"; 
    10     $('#uploadfield').block({ message: $('#ui'), css: {  '300px', border: '#b9dcfe 1px solid',padding: '0.5em 0.2em' } 
    11     }); 
    12     inte = self.setInterval("getprogress()", 500); 
    13   } 
    14 }); 
    15  
    16 $('#btn_cancel').click(function() { 
    17   var uploadid = $("#UploadID").val(); 
    18   $.ajax({ 
    19     type: "POST", 
    20     dataType: "json", 
    21     async: false, //ajax的请求时同步 只有一个线程 
    22     url: "upload_ajax.ashx", 
    23     data: "UploadID=" + uploadid + "&cancel=true", 
    24     success: function(obj) { 
    25       $("#output").html(obj.msg); 
    26       inte = self.clearInterval(inte); 
    27       $('#uploadfield').unblock(); 
    28        
    29        } 
    30   }); 
    31 }); 
    32 }); 
    33  
    34 function getprogress() { 
    35 var uploadid = $("#UploadID").val() 
    36 $.ajax({ 
    37   type: "POST", 
    38   dataType: "json", 
    39   async: false, 
    40   url: "upload_ajax.ashx", 
    41   data: "UploadID=" + uploadid, 
    42   success: function(obj) { 
    43   var p = obj.msg.Readedlength / obj.msg.TotalLength * 100; 
    44   var info = "<FONT color=Green> 当前上传文件:</FONT>" + obj.msg.CurrentFile; 
    45   info += "<br><FONT color=Green>" + obj.msg.FormatStatus + ":</FONT>" + obj.msg.Status; 
    46   info += "<br><FONT color=Green>文件大小:</FONT>" + obj.msg.TotalLength; 
    47   info += "<br><FONT color=Green>速度:</FONT>" + obj.msg.FormatRatio; 
    48   info += "<br><FONT color=Green>剩余时间:</FONT>" + obj.msg.LeftTime; 
    49  
    50  
    51   $("#output").html(info); 
    52   $("#progressbar").progressbar({ value: 0 }); //初始化 
    53   $("#progressbar").progressbar("option", "value", p); 
    54   $("#progressbar div").html(p.toFixed(2) + "%"); 
    55   $("#progressbar div").addClass("percentText"); 
    56   if (obj.msg.Status == 4) { 
    57     inte = self.clearInterval(inte); 
    58     $('#uploadfield').unblock(); 
    59   } 
    60     
    61   } 
    62 }); 
    63 }
    View Code
    交互过程代码:
     1 <%@ WebHandler Language="C#" Class="progressbar" %> 
     2  
     3 using System; 
     4 using System.Web; 
     5  
     6 using BigFileUpload;//大文件引用命名空间 
     7 using Newtonsoft.Json;//对象到JSON的相互转换 
     8 using System.Text.RegularExpressions;//正则 
     9  
    10 public class progressbar : IHttpHandler { 
    11    
    12 private string template = "{{statue:'{0}',msg:{1}}}";  
    13 public void ProcessRequest(HttpContext context)  
    14 {  
    15   context.Response.ContentType = "text/plain";  
    16   try  
    17   {  
    18   string guid = context.Request["UploadID"];  
    19   string cancel =context.Request["cancel"]; 
    20   UploadContext c = UploadContextFactory.GetUploadContext(guid);  
    21   if (!string.IsNullOrEmpty(cancel)) 
    22   {      
    23     c.Abort=true; 
    24       
    25     throw new Exception("用户取消");  
    26   }  
    27   string json = Newtonsoft.Json.JsonConvert.SerializeObject(c);  
    28       
    29   WriteResultJson(1, json, context,template); 
    30       
    31   }catch (Exception err)  
    32   {  
    33     WriteResultJson(0, err.Message, context);  
    34   }  
    35 } 
    36  
    37   
    38  
    39 public static void WriteResultJson(int resultno, string description, HttpContext context) 
    40 { 
    41   WriteResultJson(resultno, description, context, "{{statue:'{0}',msg:'{1}'}}"); 
    42 } 
    43  
    44 public static void WriteResultJson(int resultno, string description, HttpContext context, string template) 
    45 { 
    46   description = ClearBR(ReplaceString(description, "'", "|", false)); 
    47   context.Response.Write(string.Format(template, resultno, description)); 
    48 } 
    49  
    50 public static string ClearBR(string str) 
    51 { 
    52   Regex r = null; 
    53   Match m = null; 
    54   r = new Regex(@"(r|n)", RegexOptions.IgnoreCase); 
    55   for (m = r.Match(str); m.Success; m = m.NextMatch()) 
    56   { 
    57     str = str.Replace(m.Groups[0].ToString(), @"n"); 
    58   } 
    59   return str; 
    60 } 
    61  
    62 public static string ReplaceString(string SourceString, string SearchString, string ReplaceString, bool IsCaseInsensetive) 
    63 { 
    64   return Regex.Replace(SourceString, Regex.Escape(SearchString), ReplaceString, IsCaseInsensetive ? RegexOptions.IgnoreCase : RegexOptions.None); 
    65 } 
    66   
    67 public bool IsReusable  
    68 {  
    69   get  
    70   { 
    71     return false;  
    72   }  
    73 } 
    74 }
    View Code
  • 相关阅读:
    MySQL Limit优化(转)
    MySQL数据库性能优化思路与解决方法(一转)
    Mysql占用CPU过高如何优化?(转)
    数据库方面两个简单实用的优化方法(转)
    硬盘扩容9999T
    python内涵段子爬取练习
    jmeter环境配置
    PyCharm3.0默认快捷键
    python3 操作页面上各种元素的方法
    python3 selenium webdriver 元素定位xpath定位骚操作
  • 原文地址:https://www.cnblogs.com/zhangxiaozhong/p/3232974.html
Copyright © 2011-2022 走看看