asp.net怎么实现文件上传带进度条
创始人
2024-11-28 19:24:44
0次

先饱饱眼福:

asp.net怎么实现文件上传带进度条

asp.net怎么实现文件上传带进度条

asp.net怎么实现文件上传带进度条

asp.net怎么实现文件上传带进度条

在之前的文章中也有类似带进度条文件传送的案例,大家可以翻阅之前的文章对知识点进行扩充。

部分代码:

<%@ Page Language="C#" %> 
<%@ Register Assembly="MattBerseth.WebControls.AJAX" Namespace="MattBerseth.WebControls.AJAX.Progress" TagPrefix="mb" %> 
 
 
 
 
 
 Untitled Page 
  
  
  BODY{ font-family:Arial, Sans-Serif; font-size:12px;} 
  
  
 
 
  
  
 
  
 
 
      

文件上传

   
         
   请选择要上传的文件
         
   
   
   
     
      

 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; 
 } 
 }

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...