先饱饱眼福:
在之前的文章中也有类似带进度条文件传送的案例,大家可以翻阅之前的文章对知识点进行扩充。
部分代码:
<%@ Page Language=\"C#\" %> <%@ Register Assembly=\"MattBerseth.WebControls.AJAX\" Namespace=\"MattBerseth.WebControls.AJAX.Progress\" TagPrefix=\"mb\" %> <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\"> <head runat=\"server\"> <title>Untitled Page</title> <link rel=\"Stylesheet\" href=\"_assets/css/progress.css\" mce_href=\"_assets/css/progress.css\" /> <link rel=\"Stylesheet\" href=\"_assets/css/upload.css\" mce_href=\"_assets/css/upload.css\" /> <mce:style type=\"text/css\"><!-- BODY{ font-family:Arial, Sans-Serif; font-size:12px;} --></mce:style><style type=\"text/css\" mce_bogus=\"1\"> BODY{ font-family:Arial, Sans-Serif; font-size:12px;} </style> <mce:script type=\"text/C#\" runat=\"server\"><!-- protected void Page_Load(object sender, EventArgs args) { if (!this.IsPostBack) { this.Session[\"UploadInfo\"] = new UploadInfo { IsReady = false }; } } /// <summary> /// /// </summary> [System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod] public static object GetUploadStatus() { //获取文件长度 UploadInfo info = HttpContext.Current.Session[\"UploadInfo\"] as UploadInfo; if (info != null && info.IsReady) { int soFar = info.UploadedLength; int total = info.ContentLength; int percentComplete = (int)Math.Ceiling((double)soFar / (double)total * 100); string message = string.Format(\"上传 {0} ... {1} of {2} 字节\", info.FileName, soFar, total); // 返回百分比 return new { percentComplete = percentComplete, message = message }; } // 还没有准备好... return null; } // --></mce:script> </head> <body> <form id=\"form1\" runat=\"server\"> <asp:ScriptManager ID=\"scriptManager\" runat=\"server\" EnablePageMethods=\"true\" /> <mce:script type=\"text/javascript\"><!-- var intervalID = 0; var progressBar; var fileUpload; var form; // 进度条 function pageLoad(){ $addHandler($get(\'upload\'), \'click\', onUploadClick); progressBar = $find(\'progress\'); } // 注册表单 function register(form, fileUpload){ this.form = form; this.fileUpload = fileUpload; } //上传验证 function onUploadClick() { var vaild = fileUpload.value.length > 0; if(vaild){ $get(\'upload\').disabled = \'disabled\'; updateMessage(\'info\', \'初始化上传...\'); //提交上传 form.submit(); // 隐藏frame Sys.UI.DomElement.addCssClass($get(\'uploadFrame\'), \'hidden\'); // 0开始显示进度条 progressBar.set_percentage(0); progressBar.show(); // 上传过程 intervalID = window.setInterval(function(){ PageMethods.GetUploadStatus(function(result){ if(result){ // 更新进度条为新值 progressBar.set_percentage(result.percentComplete); //更新信息 updateMessage(\'info\', result.message); if(result == 100){ // 自动消失 window.clearInterval(intervalID); } } }); }, 500); } else{ onComplete(\'error\', \'您必需选择一个文件\'); } } function onComplete(type, msg){ // 自动消失 window.clearInterval(intervalID); // 显示消息 updateMessage(type, msg); // 隐藏进度条 progressBar.hide(); progressBar.set_percentage(0); // 重新启用按钮 $get(\'upload\').disabled = \'\'; // 显示frame Sys.UI.DomElement.removeCssClass($get(\'uploadFrame\'), \'hidden\'); } function updateMessage(type, value){ var status = $get(\'status\'); status.innerHTML = value; // 移除样式 status.className = \'\'; Sys.UI.DomElement.addCssClass(status, type); } // --></mce:script> <div> <div class=\"upload\"> <h3>文件上传</h3> <div> <iframe id=\"uploadFrame\" frameborder=\"0\" scrolling=\"no\" src=\"Upload.aspx\" mce_src=\"Upload.aspx\"></iframe> <mb:ProgressControl ID=\"progress\" runat=\"server\" CssClass=\"lightblue\" style=\"display:none\" mce_style=\"display:none\" Value=\"0\" Mode=\"Manual\" Speed=\".4\" Width=\"100%\" /> <div> <div id=\"status\" class=\"info\">请选择要上传的文件</div> <div class=\"commands\"> <input id=\"upload\" type=\"button\" value=\"上传\" /> </div> </div> </div> </div> </div> </form> </body> </html>
upload.aspx:
//限制大小 1M protected void Page_Load2(object sender, EventArgs e) { if (this.IsPostBack) { UploadInfo uploadInfo = this.Session[\"UploadInfo\"] as UploadInfo; if (uploadInfo == null) { // 让父页面知道无法处理上传 const string js = \"window.parent.onComplete(\'error\', \'无法上传文件。请刷新页面,然后再试一次);\"; ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), \"progress\", js, true); } else { // 让服务端知道我们还没有准备好.. uploadInfo.IsReady = false; // 上传验证 if (this.fileUpload.PostedFile != null && this.fileUpload.PostedFile.ContentLength > 0 && this.fileUpload.PostedFile.ContentLength < 1048576)// 限制1M { // 设置路径 string path = this.Server.MapPath(@\"Uploads\"); string fileName = Path.GetFileName(this.fileUpload.PostedFile.FileName); // 上传信息 uploadInfo.ContentLength = this.fileUpload.PostedFile.ContentLength; uploadInfo.FileName = fileName; uploadInfo.UploadedLength = 0; //文件存在 初始化... uploadInfo.IsReady = true; //缓存 int bufferSize = 1; byte[] buffer = new byte[bufferSize]; // 保存字节 using (FileStream fs = new FileStream(Path.Combine(path, fileName), FileMode.Create)) { while (uploadInfo.UploadedLength < uploadInfo.ContentLength) { //从输入流放进缓冲区 int bytes = this.fileUpload.PostedFile.InputStream.Read(buffer, 0, bufferSize); // 字节写入文件流 fs.Write(buffer, 0, bytes); // 更新大小 uploadInfo.UploadedLength += bytes; // 线程睡眠 上传就更慢 这样就可以看到进度条了 System.Threading.Thread.Sleep(100); } } // 删除. File.Delete(Path.Combine(path, fileName)); // 让父页面知道已经处理上传完毕 const string js = \"window.parent.onComplete(\'success\', \'{0} 已成功上传\');\"; ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), \"progress\", string.Format(js, fileName), true); } else { if (this.fileUpload.PostedFile.ContentLength >= 1048576)//1M { const string js = \"window.parent.onComplete(\'error\', \'超出上传文件限制大小,请重新选择\');\"; ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), \"progress\", js, true); } else { const string js = \"window.parent.onComplete(\'error\', \'上传文件出错\');\"; ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), \"progress\", js, true); } } uploadInfo.IsReady = false; } } } // 不限制大小 protected void Page_Load(object sender, EventArgs e) { if (this.IsPostBack) { UploadInfo uploadInfo = this.Session[\"UploadInfo\"] as UploadInfo; uploadInfo.IsReady = false; if (this.fileUpload.PostedFile != null && this.fileUpload.PostedFile.ContentLength > 0) { string path = this.Server.MapPath(@\"Uploads\"); string fileName = Path.GetFileName(this.fileUpload.PostedFile.FileName); uploadInfo.ContentLength = this.fileUpload.PostedFile.ContentLength; uploadInfo.FileName = fileName; uploadInfo.UploadedLength = 0; uploadInfo.IsReady = true; int bufferSize = 1; byte[] buffer = new byte[bufferSize]; using (FileStream fs = new FileStream(Path.Combine(path, fileName), FileMode.Create)) { while (uploadInfo.UploadedLength < uploadInfo.ContentLength) { int bytes = this.fileUpload.PostedFile.InputStream.Read(buffer, 0, bufferSize); fs.Write(buffer, 0, bytes); uploadInfo.UploadedLength += bytes; } } const string js = \"window.parent.onComplete(\'success\', \'{0} 已成功上传\');\"; ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), \"progress\", string.Format(js, fileName), true); } else { const string js = \"window.parent.onComplete(\'error\', \'上传文件出错\');\"; ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), \"progress\", js, true); } uploadInfo.IsReady = false; } }
代码就不贴完了,直接上干货,亲,这可是免邮的哦!下载地址
本文地址:https://www.stayed.cn/item/15865
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我