大文件上传,并显示进度条(续)

本文介绍了一种利用jQuery和自定义后端处理实现的文件上传方法,并详细解释了如何使用uploadfile.js脚本来实时更新上传进度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


经过一天的研究, 文件上传总共需要如上几个文件
  1. uploadFile.aspx上只是有一个file HTML控件, 后台代码只是初始化上传文件目录
     UploadContext context = UploadContextFactory.InitUploadContext(this, "/files");
    它引用了jquery form,blockUI,progressBar等插件,还包含了uploadfile.js
  2. uploadfile.js是获取进度条的一些操作(主要就是这个JS来操作)
    1. $(function()
    2. {
    3.     var info = '<div style="display:none" id="uploadinfo">';
    4.     info += '<p>正在上传: <span id="uploadfilename"></span>; 状态: <span id="uploadtitle"></span>;</p>';
    5.     info += '<p>上传速度: <span id="uploadrate"></span>;预计剩余时间: <span id="uploadlefttime"></span></p>';
    6.     info += '<p>上传文件大小: <span id="uploadtotal"></span>;已上传大小: <span id="uploadcurrent"></span></p>';
    7.     info += '<div  id="uploadprogressbar"></div>';
    8.     info += '</div>';

    9.     $("body").append(info);
    10.     //进度条
    11.     $("#uploadprogressbar").progressbar();
    12.     //上传
    13.     $('#fileupload').MultiFile(
    14.     {
    15.        STRING: 
    16.        { 
    17.         remove:'移除'
    18.         selected:'选择了: $file'
    19.         denied:'不能使用 $ext 类文件!' 
    20.        } 
    21.    }
    22.     );      
    23.    
    24. });

    25. //上传提交
    26. function upload()
    27. {
    28.         $("#uploadForm").ajaxSubmit(
    29.         {
    30.             url: "uploadfile_process.aspx?guid=" + $("#UploadID").val(),
    31.             dataType:  'text'
    32.             beforeSubmit: function(a,f,o) 
    33.             {
    34.                 startProgress();
    35.             },
    36.             async:false,
    37.             clearForm:true,
    38.             resetForm:true,
    39.             success: function(data) 
    40.             {
    41.                 //成功后刷新页面,获取新的uploadid
    42.             },
    43.             error:function(err)
    44.             {
    45.                 alert($(err).html());
    46.             }
    47.         });
    48. }

    49. function getProgress(){
    50.     $.ajax({
    51.        type: "post",
    52.        dataType:"json",
    53.        url: "uploadProgress.aspx", //获取进度条
    54.        data: "UploadID=" + $("#UploadID").val(),
    55.        success: function(data){
    56.             
    57.             $("#uploadprogressbar").progressbar("progress", data.percent);
    58.             $("#uploadfilename").html(data.filename);
    59.             $("#uploadrate").html(data.rate);
    60.             $("#uploadtitle").html(data.info);
    61.             $("#uploadlefttime").html(data.lefttime);
    62.             $("#uploadtotal").html(data.total);
    63.             $("#uploadcurrent").html(data.current);

    64.             if(data.succ==-1){
    65.                 alert(data.info);
    66.             }         
    67.             if (data.succ==0){
    68.                 setTimeout("getProgress()", 1000);
    69.             }
    70.             if (data.succ==1){
    71.                 stopProgress();
    72.                 return;
    73.             }           
    74.             
    75.        },
    76.        error:function(msg)
    77.        {
    78.             alert($(msg).html());
    79.        }
    80.     });   
    81.             
    82. }

    83. function startProgress(){
    84.     $.blockUI({message:$("#uploadinfo")});
    85.     setTimeout("getProgress()", 500);
    86. }
    87. function stopProgress()
    88. {
    89.     $.unblockUI(); 
    90. }
  3. uploadfile_process.aspx是对上传后的文件进行处理
  4. uploadProgress.aspx 获取进度条
    1.         try
    2.         {

    3.             string s = "{";
    4. //返回一个JSON数组,通过uploadID来获取上传的进程   
    5.             UploadContext upload = UploadContextFactory.GetUploadContext(Request["UploadID"]);
    6.             
    7.             //初始化
    8.             if (upload.Status == uploadStatus.Initializing)
    9.             {
    10.                 s += responeJSON(upload, "0""");
    11.             }

    12.             if (upload.Status == uploadStatus.Uploading)
    13.             {
    14.                 s += responeJSON(upload, "0""");
    15.             }

    16.             if (upload.Status == uploadStatus.Complete)
    17.             {
    18.                 s += responeJSON(upload, "1""");
    19.             }

    20.             if (upload.Status == uploadStatus.HasError)
    21.             {
    22.                 s += responeJSON(upload, "-1""");
    23.             }
    24.             s += "}";

    25.             Response.Write(s);
    26.         }
    27.         catch (Exception err)
    28.         {
    29.             //throw err;
    30.             Response.Write("{'info':'" + err.Message.Replace("'""") + "','succ':-1}");
    31.         }
    32.         
    33.     }

    34.     private string responeJSON(UploadContext upload, string succ,string errmsg)
    35.     {
    36.         string s = "";
    37.         s += "'info':'" + upload.FormatStatus + "'" ;
    38.         s += ",'percent':'" + Convert.ToInt32((upload.Readedlength * 100.0 / upload.TotalLength)).ToString() + "'";
    39.         s += ",'current':'" + (upload.Readedlength/1024).ToString() + "KB'";
    40.         s += ",'total':'" + (upload.TotalLength/1024).ToString() + "KB'";
    41.         s += ",'rate':'" + upload.FormatRatio + "'";
    42.         s += ",'filename':'" + upload.CurrentFile + "'";
    43.         s += ",'cancel_upload':" + 0 ;
    44.         s += ",'lefttime':'" + upload.LeftTime + "'";
    45.         s += ",'succ':" + succ;
    46.         s += ",'errmsg':'"  + errmsg  +"'";

    47.         return s;
    48.     }
    运行后效果如下:
  5. 总结:
    在你需要上传的页面用包含一个
    uploadFile.aspx页面,如下
    <iframe id="iUpload" src="../../common/ajax/uploadfile/uploadFile.aspx" frameborder="0" width="100%" height="300"></iframe>
    然后在这个页面放一个按钮,该按钮事件调用uploadfile.aspx中js文件uploadfile.js中
    upload()事件

    1.         $(function()
    2.         {
    3.             $("#img_submit").click(function()
    4.             {
    5.                var v= document.getElementById("iUpload").contentWindow;
    6.                v.upload();
    7.             });
    8.            
    9.         });
    我的上传页面.aspx 包含 uploadfile.aspx 调用 uploadprogress.aspx?guid=xxxx来显示进度,并上传完成后 调用 uploadfile_process.aspx?guid=xxxx,来获取上传的文件ID等信息,作下一步处理(如写到数据库)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值