大文件上传 进度条显示 (仿csdn资源上传效果)

简介:

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

弹出透明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提交 

参照了“蚂蚁飞了”的文章 多谢多谢 http://blog.csdn.net/jetsteven

 

 

HTML:

<form id="uploadForm" runat="server" enctype="multipart/form-data">
  <div id="uploadfield"  style="width:600px; height:500px">
   <input id="File1" type="file" runat="server" />
   <asp:Button ID="Button1" runat="server"  Text="上传" onclick="Button1_Click" />
    <p>文件上传进度条</p>
    <p>文件上传进度条</p>
    <p>文件上传进度条</p>
    <p>文件上传进度条</p>
    <p>文件上传进度条</p>
    <p>文件上传进度条</p>
     <p>文件上传进度条</p>
   </div>                 
  <div id="ui"  style="display:none"  >  
   <div id="output" > </div>    
   <div id="progressbar"class="ui-progressbar ui-widget ui-widget-content ui-corner-all" style="width:296px; height:20px;"></div>
   <input id="btn_cancel" type="button" value="取消上传" />
  </div>
</form>
 
js:
 
var inte;
$(function() {
$('#uploadForm').submit(function() {
    return false;
});

$('#uploadForm').ajaxForm({ //这里调用jquery.form.js表单注册方法
    beforeSubmit: function(a, f, o) {//提交前的处理
        o.dataType = "json";
        $('#uploadfield').block({ message: $('#ui'), css: { width: '300px', border: '#b9dcfe 1px solid',padding: '0.5em 0.2em'  }
        });
        inte = self.setInterval("getprogress()", 500);
    }
});

$('#btn_cancel').click(function() {
    var uploadid = $("#UploadID").val();
    $.ajax({
        type: "POST",
        dataType: "json",
        async: false, //ajax的请求时同步 只有一个线程
        url: "upload_ajax.ashx",
        data: "UploadID=" + uploadid + "&cancel=true",
        success: function(obj) {
            $("#output").html(obj.msg);
            inte = self.clearInterval(inte);
            $('#uploadfield').unblock(); 
            
             }
    });
});
});

function getprogress() {
var uploadid = $("#UploadID").val()
$.ajax({
    type: "POST",
    dataType: "json",
    async: false,
    url: "upload_ajax.ashx",
    data: "UploadID=" + uploadid,
    success: function(obj) {
    var p = obj.msg.Readedlength / obj.msg.TotalLength * 100;
    var info = "<FONT color=Green> 当前上传文件:</FONT>" + obj.msg.CurrentFile;
    info += "<br><FONT color=Green>" + obj.msg.FormatStatus + ":</FONT>" + obj.msg.Status;
    info += "<br><FONT color=Green>文件大小:</FONT>" + obj.msg.TotalLength;
    info += "<br><FONT color=Green>速度:</FONT>" + obj.msg.FormatRatio;
    info += "<br><FONT color=Green>剩余时间:</FONT>" + obj.msg.LeftTime;


    $("#output").html(info);
    $("#progressbar").progressbar({ value: 0 }); //初始化
    $("#progressbar").progressbar("option", "value", p);
    $("#progressbar div").html(p.toFixed(2) + "%");
    $("#progressbar div").addClass("percentText");
    if (obj.msg.Status == 4) {
        inte = self.clearInterval(inte);
        $('#uploadfield').unblock(); 
    }
      
    }
});
}
 
交互过程代码:
 
<%@ WebHandler Language="C#" Class="progressbar" %>

using System;
using System.Web;

using BigFileUpload;//大文件引用命名空间
using Newtonsoft.Json;//对象到JSON的相互转换
using System.Text.RegularExpressions;//正则

public class progressbar : IHttpHandler {
    
private string template = "{{statue:'{0}',msg:{1}}}";   
public void ProcessRequest(HttpContext context)   
{   
    context.Response.ContentType = "text/plain";   
    try  
    {   
    string guid = context.Request["UploadID"];   
    string cancel =context.Request["cancel"];
    UploadContext c = UploadContextFactory.GetUploadContext(guid);  
    if (!string.IsNullOrEmpty(cancel))
    {           
        c.Abort=true;
          
        throw new Exception("用户取消");   
    }   
    string json = Newtonsoft.Json.JsonConvert.SerializeObject(c);   
           
    WriteResultJson(1, json, context,template);
           
    }catch (Exception err)   
    {   
        WriteResultJson(0, err.Message, context);   
    }   
}

  

public static void WriteResultJson(int resultno, string description, HttpContext context)
{
    WriteResultJson(resultno, description, context, "{{statue:'{0}',msg:'{1}'}}");
}

public static void WriteResultJson(int resultno, string description, HttpContext context, string template)
{
    description = ClearBR(ReplaceString(description, "'", "|", false));
    context.Response.Write(string.Format(template, resultno, description));
}

public static string ClearBR(string str)
{
    Regex r = null;
    Match m = null;
    r = new Regex(@"(\r|\n)", RegexOptions.IgnoreCase);
    for (m = r.Match(str); m.Success; m = m.NextMatch())
    {
        str = str.Replace(m.Groups[0].ToString(), @"\n");
    }
    return str;
}

public static string ReplaceString(string SourceString, string SearchString, string ReplaceString, bool IsCaseInsensetive)
{
    return Regex.Replace(SourceString, Regex.Escape(SearchString), ReplaceString, IsCaseInsensetive ? RegexOptions.IgnoreCase : RegexOptions.None);
}
  
public bool IsReusable   
{   
    get  
    {
        return false;   
    }   
} 
} 
       

大家有什么问题 可以在线多多交流!

附:源码打包下载 已经放到20楼了 需要的点击下载就行了!



    本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/archive/2010/01/14/1647866.html,如需转载请自行联系原作者


相关文章
|
5天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
307 116
|
20天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
505 45
Meta SAM3开源:让图像分割,听懂你的话
|
14天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
695 222
|
2天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
137 95
|
12天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1711 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
953 62