请教各位高手:
asp.net在上传图片时怎样得到它上传的进度了?,要是能提供源码那就万分感谢了。
谢谢了

解决方案 »

  1.   

    radcontrol radupload 上传控件  下载处
    http://bbs.topsage.com/dispbbs.asp?boardID=123&ID=143044
    asp.net2.0 上传大容量文件第三方控件radupload使用实例  http://www.cnblogs.com/xlx0210/archive/2009/08/28/1555731.html
      

  2.   

    ASP.NET中给长时间运行的任务(如文件上传)加进度条源代码
    有实例可下载。http://www.bbs180.com/showtopic-739.aspx
      

  3.   

    http://www.cnblogs.com/stg609/archive/2008/08/04/1259469.html
      

  4.   

    一般情况下,要实现上传进度条首先要实现上传文件分块读取,而默认情况下,iis将直接把上传的文件一次读入到内存中,所以本处的难点在于拦截iis的文件上传过程,转而自己的实现方式。所以,我们可以实现一个IHttpModule来处理上传过程。具体的过程是Application_BeginRequest下得到当前的HttpWorkRequest,然后通过这个对象来得到当前请求的类型,长度。具体方法请查看类的实现代码(该类来自于互联网)。由于在类中已经有比较完整的注释,所以我只介绍一个流程,没有涉及到具体的方法。我们可以知道,如果我们取得了总的长度,那我们就可以设置一个固定的长度(比如1024字节),然后设置一个循环来每次读取这些数据,这样,我们就可以得到当前总共读取的内容长度。那页面上如何得到当前的进度呢?利用appliaction对象来存储数据,这样,前台的页面也可以使用application来得到当前的进度。因为application要使用一个键来确定是哪次的数据,常用的方法是,ihttpmodule中通过request来取得这次的键值,而上传文件也同样拥有这样一个键值。因此在upload.aspx中的 page_load中需要: this.UploadID = this.Request["UploadID"];        if (this.UploadID == null)            this.Response.Redirect("~/user/uploadphotos.aspx?UploadID=" + Guid.NewGuid().ToString()+                "&itemid="+this.itemid.ToString (), true);如果第一次进入,就重新转发到这张页面,并给他一个uploadid,同时在HttpUploadModule中:string uploadId = app.Request.QueryString["UploadID"];//同步取得这个uploadid那如何来实时读取这个数据并显示在页面中呢?我们可以在upload.aspx中使用xmlhttp去循环请求一个progress.aspx(这个页面来读取application中的数据)。当然,在asp.net中我们还可以使用asp.net ajax来实现这一过程,具体方法是:建立一个webservices来读取application中的数据;在ajax中来访问这个service;如下webservices端代码:using System;using System.Web;using System.Collections;using System.Web.Services;using System.Web.Services.Protocols;using adow.adup.bll;namespace thmz.shire.services{    /// <summary>    /// Uploadprogress 的摘要说明    /// </summary>    [WebService(Namespace = "http://tempuri.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    [System.Web.Script.Services.ScriptService]    public >    {        public Uploadprogress()        {            //如果使用设计的组件,请取消注释以下行            //InitializeComponent();        }        [WebMethod]        public string HelloWorld()        {            return "Hello World";        }        [WebMethod]        public string Getprogess(string upid)        {            Progress progress = HttpUploadModule.GetProgress(upid, this.Application);            string scriptText = "";            if (progress != null)            {                if (progress.State == UploadState.ReceivingData)                {                    string length = (progress.ContentLength / 1024).ToString();                    string read = (progress.BytesRead / 1024).ToString();                    scriptText = String.Format("{0}:{1}", length, read);                }                else if (progress.State == UploadState.Complete)                {                    scriptText = "完成";                }                else                {                    scriptText = "出错";                }            }            return scriptText;        }    }}在upload.aspx中的services请求:<script language="javascript" type="text/javascript">        function startprogress()        {            getprogress('<%=UploadID %>');        }        var uploadid="";        var callindex=0;        var div_process_out=$get('div_process_out');        var div_process=$get('div_process');        function uploadit()        {            if (uploadid=="")                return;            uploadrequest= thmz.shire.services.Uploadprogress.Getprogess(uploadid,up_complete,up_error);        }        function up_complete(result)        {            var sp_result=$get("sp_result");            callindex++;            if (result!=null)            {                 div_process_out.style.visibility='visible';                                       var valuecol=result.split(':');                if (valuecol.length>=2)                {                    var length=valuecol[0];                    var read=valuecol[1];                                       var completeblocks=parseInt(parseFloat (read)/parseFloat(length) * 100);                    sp_result.innerText=completeblocks+" %";                    div_process.style.width=completeblocks+"%";                }                else                {                    sp_result.innerText=result;                }            }        }        function up_error(result)        {            var sp_result=$get("sp_result");            sp_result.innerText="error occurs";        }        function getprogress(upid)        {            uploadid=upid;            window.setInterval("uploadit()",400);        }    </script>当然需要触发这个请求:<asp:Button runat="server" Text="上传" OnClientClick="startprogress()"/>  还有在webconfig中启用我们的这个httpuploadmodule<httpModules>      <!-- 分块上传模块-->      <add > </httpModules>为了能够上传大文件,我们还需要设置:<httpRuntime     maxRequestLength="1000000"     executionTimeout="300" />