上传图片时怎样得到上传进度 请教各位高手:asp.net在上传图片时怎样得到它上传的进度了?,要是能提供源码那就万分感谢了。谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 radcontrol radupload 上传控件 下载处http://bbs.topsage.com/dispbbs.asp?boardID=123&ID=143044asp.net2.0 上传大容量文件第三方控件radupload使用实例 http://www.cnblogs.com/xlx0210/archive/2009/08/28/1555731.html ASP.NET中给长时间运行的任务(如文件上传)加进度条源代码有实例可下载。http://www.bbs180.com/showtopic-739.aspx http://www.cnblogs.com/stg609/archive/2008/08/04/1259469.html 一般情况下,要实现上传进度条首先要实现上传文件分块读取,而默认情况下,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" /> 各位大哥大姐,江湖救急,FCKeditor自定义非空验证 关于table控件的一个问题 非常奇怪的问题,页面查看源只有这些东西 如何在源中注释,教我一下 UpdatePanel前面加#问题 母版页控件的动作如何响应到内容页里面 高手们帮忙看看,小弟弄不了了。 字符串处理,怎样保留左边去掉右边的空格 学习新东西,掌握新技术,来这里学学.net 水晶报表,求救,等待 培训调查大家帮添添 不知道大家了解微件吗?
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
有实例可下载。http://www.bbs180.com/showtopic-739.aspx