ASP.Net上传文件带进度条、显示剩余时间!
生活随笔
收集整理的這篇文章主要介紹了
ASP.Net上传文件带进度条、显示剩余时间!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
近段時間因為開發隱私存儲網站,采用ASP.Net 2.0在處理上傳文件,因為上傳的文件比較大,為了改善用戶體驗,所以自己重寫了ASP.Net 的標準上傳控件,實現顯示進度條,百分比,平均速度,剩余時間,最小化后臺運行等功能!
上傳文件運行界面:
部份核心代碼,需要的朋友根據實際情況修改:
前臺處理HTML:UpLoadFile.aspx
程序代碼
<%@ Page Language="C#" AutoEventWireup="true" Inherits="WDMM.Web.UpLoad.UpLoadFile" %>
<!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></title>
<link href="/css/index.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javascript" src="/Script/Prototype.js"></script>
<script type="text/javascript" language="javascript" src="/Script/Common.js"></script>
<script type="text/javascript" language="javascript">
//<![CDATA[
??var url = 'progress.aspx?UploadID=<%=Request.QueryString["UploadID"]%>';
//]]>
</script>
</head>
<body>
<div class="mContent">
??<div class="scwj">
????<form id="upform" method="post" enctype="multipart/form-data" runat="server">
??????<input id="upload" name="upload" type="hidden" value="no" runat="server" />
??????<p> <b>選擇分類:</b>
????????<select name="class" style="font-size: 12px;">
??????????<asp:Repeater ID="RepeaterClass" runat="server">
????????????<ItemTemplate>
??????????????<option value="<%# Eval("id") %>"> <%# Eval("name") %> </option>
????????????</ItemTemplate>
??????????</asp:Repeater>
????????</select>
????????<input type="button" class="tjfl" οnclick="Util.classdisplay('01');" />
??????</p>
??????<p id="newclass" style="display: none;">
????????<input name="classtext" type="text" maxlength="30" />
????????<input name="classadd" type="button" value="確定" class="tjfl1" οnclick="Util.chkclass('01');" />
????????<input name="classcls" type="button" value="取消" class="tjfl2" οnclick="Util.clearclass();" />
??????</p>
??????<p>? </p>
??????<p> <b>上傳:</b></p>
??????<p id="MyFile">
????????<input type="file" size="50" name="File" />
??????</p>
??????<p>
????????<input type="button" value="增加文件" class="inputaa" οnclick="Files.adds();" />
??????</p>
??????<br />
??????<p> 注:單個上傳文件大小,不能超過100MB;每次最多可以上傳5個文件。</p>
??????<br />
??????<p>
????????<input type="button" value="重新選擇" class="inputaa" οnclick="Files.resets();" />
????????<input type="button" value="開始上傳" class="inputaa" οnclick="Files.submits();" />
??????</p>
????</form>
??</div>
</div>
</body>
</html>
前臺處理代碼:UpLoadFile.aspx.cs
程序代碼
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.UI.WebControls;
using System.Text;
using System.IO;
using WDMM.Common;
using WDMM.Data.SqlServer;
using WDMM.Web.UpLoad;
namespace WDMM.Web.UpLoad
{
????public partial class UpLoadFile : WDMM.Common.BasePage
????{
????????private string sFilesserver, sFilepath = "";
????????protected void Page_Load(object sender, EventArgs e)
????????{
????????????Utils.GetiFrameLogin();
????????????if (Utils.GetRequestQueryString("UploadID") == "")
????????????{
????????????????Response.Redirect("UpLoadFile.aspx?UploadID=" + Utils.GetGuid());
????????????}
????????????Cookies ck = new Cookies();
????????????this.GetFoldersid(ck.Id);
????????????if (Utils.GetRequestForm("upload") == "yes")
????????????{
????????????????if (ck.Onlock != "True")
????????????????{
????????????????????sFilesserver = ConfigurationManager.AppSettings["FileServer"].ToString();
????????????????????sFilepath = HttpContext.Current.Request.MapPath("/File/" + ck.Id + "/");
????????????????????if (Utils.DirectoryExists(sFilepath))
????????????????????{
????????????????????????this.SaveFile(ck.Id, ck.Email);
????????????????????}
????????????????}
????????????????else
????????????????{
????????????????????StringBuilder java = new StringBuilder();
????????????????????java.AppendLine("parent.Up.revert();");
????????????????????java.AppendLine("setTimeout(\"window.location.href = 'UpLoadFile.aspx';\", 1000);");
????????????????????Utils.javaFunction("您存儲空間已被鎖定,請先升級!", java.ToString());
????????????????}
????????????}
????????}
????????/// <summary>
????????/// 文件夾編號
????????/// </summary>
????????private string Foldersid
????????{
????????????get { return Utils.GetRequestForm("class"); }
????????????set { Foldersid = value; }
????????}
????????/// <summary>
????????/// 獲取用戶文件夾
????????/// </summary>
????????/// <param name="userid"></param>
????????private void GetFoldersid(string userid)
????????{
????????????Repeater RepeaterClass;
????????????RepeaterClass = (Repeater)Page.FindControl("RepeaterClass");
????????????using (DataTable dt = DataProvider.GetUserClass(1, userid))
????????????{
????????????????if (dt.Rows.Count > 0)
????????????????{
????????????????????RepeaterClass.DataSource = dt;
????????????????????RepeaterClass.DataBind();
????????????????}
????????????}
????????}
????????/// <summary>
????????/// 保存上傳文件
????????/// </summary>
????????/// <param name="userid"></param>
????????/// <param name="email"></param>
????????private void SaveFile(string userid, string email)
????????{
????????????double disksize, spentsize = 0;
????????????HttpFileCollection files = Request.Files;
????????????try
????????????{
????????????????StringBuilder sb = new StringBuilder();
????????????????int i = 1;
????????????????for (int iFile = 0; iFile < files.Count; iFile++)
????????????????{
????????????????????HttpPostedFile postedFile = files[iFile];
????????????????????string fileName = Path.GetFileName(postedFile.FileName);
????????????????????string Extension = Path.GetExtension(postedFile.FileName);
????????????????????if (Extension != "")
????????????????????{
????????????????????????double sFilesize = postedFile.ContentLength;
????????????????????????if (Utils.GetFileSizeMB(sFilesize) > 100)
????????????????????????{
????????????????????????????sb.Append(i.ToString() + "、文件“" + fileName + "” 超過 100MB 限制,跳過此文件。\\r\\n");
????????????????????????????i++;
????????????????????????}
????????????????????????else if (sFilesize < 1)
????????????????????????{
????????????????????????????sb.Append(i.ToString() + "、文件“" + fileName + "” 小于 0KB 限制,跳過此文件。\\r\\n");
????????????????????????????i++;
????????????????????????}
????????????????????????else
????????????????????????{
????????????????????????????using (DataTable dt = DataProvider.GetUserLoginInfo(email))
????????????????????????????{
????????????????????????????????if (dt.Rows.Count > 0)
????????????????????????????????{
????????????????????????????????????disksize = Convert.ToDouble(dt.Rows[0]["disksize"].ToString());
????????????????????????????????????spentsize = disksize - Convert.ToDouble(dt.Rows[0]["spentsize"].ToString());
????????????????????????????????}
????????????????????????????}
????????????????????????????if (sFilesize < spentsize)
????????????????????????????{
????????????????????????????????string sFilename = Guid.NewGuid().ToString();
????????????????????????????????Fileinfo fi = new Fileinfo();
????????????????????????????????fi.Userid = userid;
????????????????????????????????fi.Foldersid = Foldersid;
????????????????????????????????fi.Extension = Extension;
????????????????????????????????fi.FileName = fileName;
????????????????????????????????fi.Filesize = sFilesize.ToString();
????????????????????????????????fi.Fileserver = sFilesserver;
????????????????????????????????fi.Diskpath = sFilepath + sFilename + Extension;
????????????????????????????????postedFile.SaveAs(fi.Diskpath);
????????????????????????????????if (!DataProvider.SetInFile(fi))
????????????????????????????????{
????????????????????????????????????Utils.FileDelete(fi.Diskpath);
????????????????????????????????????sb.Append(i.ToString() + "、文件“" + fileName + "”上傳失敗。\\r\\n");
????????????????????????????????????i++;
????????????????????????????????}
????????????????????????????}
????????????????????????????else
????????????????????????????{
????????????????????????????????sb.Append("您的空間已滿,請升級再上傳!");
????????????????????????????????break;
????????????????????????????}
????????????????????????}
????????????????????}
????????????????}
????????????????string para = "ConFileList.aspx";
????????????????string strMessage = "溫馨提示:";
????????????????StringBuilder java = new StringBuilder();
????????????????if (sb.Length > 0)
????????????????{
????????????????????strMessage += "\\r\\n\\r\\n" + sb.ToString();
????????????????????java.AppendLine("parent.Up.revert();");
????????????????????java.AppendLine("setTimeout(\"window.location.href = 'UpLoadFile.aspx';\", 1000);");
????????????????}
????????????????else
????????????????{
????????????????????strMessage += "您所選擇的文件已全部上傳完畢。";
????????????????????java.AppendLine("parent.Up.Completes('complete," + HttpUploadModule.TotalBytes + "," + HttpUploadModule.TotalBytes + "');");
????????????????????java.AppendLine("parent.Up.closeup('" + para + "');");
????????????????????java.AppendLine("setTimeout(\"window.location.href = 'UpLoadFile.aspx';\", 1500);");
????????????????}
????????????????Utils.javaFunction(strMessage, java.ToString());
????????????}
????????????catch (Exception ex)
????????????{
????????????????throw new Exception(ex.Message + ex.StackTrace);
????????????}
????????}
????}
}
后臺進度條狀態:Progress.aspx
程序代碼
using System;
using System.Web;
using WDMM.Common;
using WDMM.Web.UpLoad;
namespace WDMM.Web.UpLoad
{
????/// <summary>
????/// Progress.aspx 頁面處理
????/// </summary>
????public class UploadProgress : WDMM.Common.BasePage
????{
????????private string strResult = "";
????????protected void Page_Load(object sender, EventArgs e)
????????{
????????????Progress progress = HttpUploadModule.GetProgress(Utils.GetRequestQueryString("UploadID"), Application);
????????????if (progress != null)
????????????{
????????????????if (progress.State == UploadState.ReceivingData)
????????????????{
????????????????????strResult = "send," + progress.ContentLength;
????????????????????strResult += "," + progress.BytesRead;
????????????????}
????????????????else if (progress.State == UploadState.Complete)
????????????????{
????????????????????strResult = "complete," + progress.ContentLength;
????????????????????strResult += "," + progress.BytesRead;
????????????????}
????????????????else
????????????????{
????????????????????strResult = "error,-1,0";
????????????????}
????????????}
????????????Response.Clear();
????????????Response.Write(strResult);
????????????Response.End();
????????}
????}
}
前臺Ajax獲取上傳進度計算相關數據:Common.js
程序代碼
var bTimer = 0;
var eTimer = 0;
var mInutes = 0;
var hh = 0;
var mm = 0;
var ss = 0;
var uptime = null;
var Up =
{
?? Init : function(sType)
?? {
??????parent.$('upType').value = sType;
??????bTimer = new Date();
??????parent.$('WodemimiUpload').style.display = 'block';
??????parent.$('Status').innerHTML = '正在分析,請稍候。。。';
??????setMediacy('WodemimiUpload');
??????setTimeout('Up.Progress()', 1500);
?? }
?? ,
?? Progress : function()
?? {
??????var strurl = url + '&type=start&time=' + Ajax.getDatetime();
??????new Ajax.Request(strurl,
??????{
???????? method : 'get',
???????? onSuccess : function(sResult)
???????? {
????????????Up.LoadData(sResult.responseText);
???????? }
??????}
??????);
?? }
?? ,
?? LoadData : function(result)
?? {
??????var myArray = result.split(',');
??????var Percent = 0;
??????eTimer = new Date();
??????mInutes = Math.round((eTimer.getTime() - bTimer.getTime()) / 1000);
??????switch (myArray[0])
??????{
???????? case 'send' :
???????? Percent = (myArray[2] / myArray[1] * 100).toFixed(2);
???????? parent.$('TotalBytes').innerHTML = GetFileSize(myArray[1], 2);
???????? parent.$('ReadBytes').innerHTML = GetFileSize(myArray[2], 2);
???????? parent.$('Status').innerHTML = '已經上傳:';
???????? parent.$('AverageBytes').innerHTML = GetFileSize(myArray[2] / mInutes, 2);
???????? parent.$('SpareHour').innerHTML = GetTimer(myArray[1], myArray[2], mInutes);
???????? parent.$('Percent').style.width = Percent + '%';
???????? parent.$('PercentNumber').innerHTML = Percent + '%';
???????? parent.$('WDMMUpLoad').innerHTML = '<font color="#007500"><strong>顯示上傳('
???????? + '<font color="#FF6A00">' + Percent + '%</font>)</strong></font> | ';
???????? break;
???????? case 'complete' :
???????? Up.Complete(result);
???????? Up.clearTime();
???????? break;
???????? case 'error' :
???????? alert(result);
???????? break;
??????}
??????uptime = window.setTimeout('Up.Progress()', 1000);
?? }
?? ,
?? clearTime : function()
?? {
??????if(uptime != null)
??????{
???????? window.clearTimeout(uptime);
???????? uptime = null;
??????}
?? }
?? ,
?? Complete : function(result)
?? {
??????var myArray = result.split(',');
??????parent.$('TotalBytes').innerHTML = GetFileSize(myArray[1], 2);
??????parent.$('ReadBytes').innerHTML = '';
??????parent.$('Status').innerHTML = '上傳完畢,加密處理中。。。';
??????parent.$('SpareHour').innerHTML = '00:00:00';
??????parent.$('Percent').style.width = '100.00%';
??????parent.$('PercentNumber').innerHTML = '100.00%';
??????parent.$('WDMMUpLoad').innerHTML = '<font color="#007500"><strong>顯示上傳(<font color="#FF6A00">'
??????+ '100.00%</font>)</strong></font> | ';
??????setTimeout('parent.Util.condisk();', 2000);
?? }
?? ,
?? Completes : function(result)
?? {
??????var myArray = result.split(',');
??????$('TotalBytes').innerHTML = GetFileSize(myArray[1], 2);
??????$('ReadBytes').innerHTML = '';
??????$('Status').innerHTML = '上傳完畢,加密處理中。。。';
??????$('SpareHour').innerHTML = '00:00:00';
??????$('Percent').style.width = '100.00%';
??????$('PercentNumber').innerHTML = '100.00%';
??????$('WDMMUpLoad').innerHTML = '<font color="#007500"><strong>顯示上傳(<font color="#FF6A00">100.00%'
??????+ '</font>)</strong></font> | ';
?? }
?? ,
?? closeup : function(para)
?? {
??????switch($('upType').value)
??????{
???????? case '02' :
???????? setTimeout('menu.active(\'list_02\', \'' + para + '\');', 1500);
???????? break;
???????? case '03' :
???????? setTimeout('menu.active(\'list_03\', \'' + para + '\');', 1500);
???????? break;
???????? case '04' :
???????? setTimeout('menu.active(\'list_04\', \'' + para + '\');', 1500);
???????? break;
??????}
??????Up.revert();
?? }
?? ,
?? revert : function()
?? {
??????$('WodemimiUpload').style.display = 'none';
??????$('WDMMUpLoad').style.visibility = 'hidden';
??????$('WDMMInfobar').style.display = 'none';
??????$('TotalBytes').innerHTML = '0.00 KB';
??????$('ReadBytes').innerHTML = '0.00 KB';
??????$('Status').innerHTML = '準備就緒。';
??????$('SpareHour').innerHTML = '00:00:00';
??????$('Percent').style.width = '0.00%';
??????$('PercentNumber').innerHTML = '0.00%';
??????$('WDMMUpLoad').innerHTML = '<font color="#007500"><strong>顯示上傳(<font color="#FF6A00">00.00%'
??????+ '</font>)</strong></font> | ';
??????$('upType').value = '00';
??????setTimeout('Util.condisk();', 3000);
?? }
?? ,
?? showhideup : function()
?? {
??????if($('WodemimiUpload').style.display != 'block')
??????{
???????? $('WodemimiUpload').style.display = 'block';
???????? $('WDMMUpLoad').style.visibility = 'hidden';
???????? $('WDMMInfobar').style.display = 'none';
??????}
??????else
??????{
???????? $('WodemimiUpload').style.display = 'none';
???????? $('WDMMUpLoad').style.visibility = 'visible';
???????? $('WDMMInfobar').style.display = 'block';
???????? $('WDMMInfobar').style.left = (document.body.clientWidth / 2 - $('WDMMInfobar').clientWidth
???????? / 2) + 'px';
???????? setTimeout('Up.hideinfo()', 3000);
??????}
?? }
?? ,
?? showup : function()
?? {
??????if($('WodemimiUpload').style.display != 'block')
??????{
???????? $('WodemimiUpload').style.display = 'block';
???????? $('WDMMUpLoad').style.visibility = 'hidden';
???????? $('WDMMInfobar').style.display = 'none';
??????}
?? }
?? ,
?? hideup : function()
?? {
??????if($('WodemimiUpload').style.display != 'none')
??????{
???????? $('WodemimiUpload').style.display = 'none';
???????? $('WDMMUpLoad').style.visibility = 'visible';
???????? $('WDMMInfobar').style.display = 'block';
???????? $('WDMMInfobar').style.left = (document.body.clientWidth / 2 - $('WDMMInfobar').clientWidth
???????? / 2) + 'px';
???????? setTimeout('Up.hideinfo()', 3000);
??????}
?? }
?? ,
?? hideinfo : function()
?? {
??????$('WDMMInfobar').style.display = 'none';
?? }
?? ,
?? stopup : function()
?? {
??????var sid = 'up_' + $('upType').value + '_tb';
??????if( ! confirm('溫馨提示:我的秘密上傳運行中,關閉則需要重新上傳。'))
??????{
???????? return;
??????}
??????Up.revert();
??????menu.refurbish();
??????setTimeout('menu.deltable(\'' + sid + '\')', 1000);
??????return;
?? }
}
;
轉自:http://www.80600.net/article.asp?id=163
上傳文件運行界面:
部份核心代碼,需要的朋友根據實際情況修改:
前臺處理HTML:UpLoadFile.aspx
程序代碼
<%@ Page Language="C#" AutoEventWireup="true" Inherits="WDMM.Web.UpLoad.UpLoadFile" %>
<!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></title>
<link href="/css/index.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javascript" src="/Script/Prototype.js"></script>
<script type="text/javascript" language="javascript" src="/Script/Common.js"></script>
<script type="text/javascript" language="javascript">
//<![CDATA[
??var url = 'progress.aspx?UploadID=<%=Request.QueryString["UploadID"]%>';
//]]>
</script>
</head>
<body>
<div class="mContent">
??<div class="scwj">
????<form id="upform" method="post" enctype="multipart/form-data" runat="server">
??????<input id="upload" name="upload" type="hidden" value="no" runat="server" />
??????<p> <b>選擇分類:</b>
????????<select name="class" style="font-size: 12px;">
??????????<asp:Repeater ID="RepeaterClass" runat="server">
????????????<ItemTemplate>
??????????????<option value="<%# Eval("id") %>"> <%# Eval("name") %> </option>
????????????</ItemTemplate>
??????????</asp:Repeater>
????????</select>
????????<input type="button" class="tjfl" οnclick="Util.classdisplay('01');" />
??????</p>
??????<p id="newclass" style="display: none;">
????????<input name="classtext" type="text" maxlength="30" />
????????<input name="classadd" type="button" value="確定" class="tjfl1" οnclick="Util.chkclass('01');" />
????????<input name="classcls" type="button" value="取消" class="tjfl2" οnclick="Util.clearclass();" />
??????</p>
??????<p>? </p>
??????<p> <b>上傳:</b></p>
??????<p id="MyFile">
????????<input type="file" size="50" name="File" />
??????</p>
??????<p>
????????<input type="button" value="增加文件" class="inputaa" οnclick="Files.adds();" />
??????</p>
??????<br />
??????<p> 注:單個上傳文件大小,不能超過100MB;每次最多可以上傳5個文件。</p>
??????<br />
??????<p>
????????<input type="button" value="重新選擇" class="inputaa" οnclick="Files.resets();" />
????????<input type="button" value="開始上傳" class="inputaa" οnclick="Files.submits();" />
??????</p>
????</form>
??</div>
</div>
</body>
</html>
前臺處理代碼:UpLoadFile.aspx.cs
程序代碼
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.UI.WebControls;
using System.Text;
using System.IO;
using WDMM.Common;
using WDMM.Data.SqlServer;
using WDMM.Web.UpLoad;
namespace WDMM.Web.UpLoad
{
????public partial class UpLoadFile : WDMM.Common.BasePage
????{
????????private string sFilesserver, sFilepath = "";
????????protected void Page_Load(object sender, EventArgs e)
????????{
????????????Utils.GetiFrameLogin();
????????????if (Utils.GetRequestQueryString("UploadID") == "")
????????????{
????????????????Response.Redirect("UpLoadFile.aspx?UploadID=" + Utils.GetGuid());
????????????}
????????????Cookies ck = new Cookies();
????????????this.GetFoldersid(ck.Id);
????????????if (Utils.GetRequestForm("upload") == "yes")
????????????{
????????????????if (ck.Onlock != "True")
????????????????{
????????????????????sFilesserver = ConfigurationManager.AppSettings["FileServer"].ToString();
????????????????????sFilepath = HttpContext.Current.Request.MapPath("/File/" + ck.Id + "/");
????????????????????if (Utils.DirectoryExists(sFilepath))
????????????????????{
????????????????????????this.SaveFile(ck.Id, ck.Email);
????????????????????}
????????????????}
????????????????else
????????????????{
????????????????????StringBuilder java = new StringBuilder();
????????????????????java.AppendLine("parent.Up.revert();");
????????????????????java.AppendLine("setTimeout(\"window.location.href = 'UpLoadFile.aspx';\", 1000);");
????????????????????Utils.javaFunction("您存儲空間已被鎖定,請先升級!", java.ToString());
????????????????}
????????????}
????????}
????????/// <summary>
????????/// 文件夾編號
????????/// </summary>
????????private string Foldersid
????????{
????????????get { return Utils.GetRequestForm("class"); }
????????????set { Foldersid = value; }
????????}
????????/// <summary>
????????/// 獲取用戶文件夾
????????/// </summary>
????????/// <param name="userid"></param>
????????private void GetFoldersid(string userid)
????????{
????????????Repeater RepeaterClass;
????????????RepeaterClass = (Repeater)Page.FindControl("RepeaterClass");
????????????using (DataTable dt = DataProvider.GetUserClass(1, userid))
????????????{
????????????????if (dt.Rows.Count > 0)
????????????????{
????????????????????RepeaterClass.DataSource = dt;
????????????????????RepeaterClass.DataBind();
????????????????}
????????????}
????????}
????????/// <summary>
????????/// 保存上傳文件
????????/// </summary>
????????/// <param name="userid"></param>
????????/// <param name="email"></param>
????????private void SaveFile(string userid, string email)
????????{
????????????double disksize, spentsize = 0;
????????????HttpFileCollection files = Request.Files;
????????????try
????????????{
????????????????StringBuilder sb = new StringBuilder();
????????????????int i = 1;
????????????????for (int iFile = 0; iFile < files.Count; iFile++)
????????????????{
????????????????????HttpPostedFile postedFile = files[iFile];
????????????????????string fileName = Path.GetFileName(postedFile.FileName);
????????????????????string Extension = Path.GetExtension(postedFile.FileName);
????????????????????if (Extension != "")
????????????????????{
????????????????????????double sFilesize = postedFile.ContentLength;
????????????????????????if (Utils.GetFileSizeMB(sFilesize) > 100)
????????????????????????{
????????????????????????????sb.Append(i.ToString() + "、文件“" + fileName + "” 超過 100MB 限制,跳過此文件。\\r\\n");
????????????????????????????i++;
????????????????????????}
????????????????????????else if (sFilesize < 1)
????????????????????????{
????????????????????????????sb.Append(i.ToString() + "、文件“" + fileName + "” 小于 0KB 限制,跳過此文件。\\r\\n");
????????????????????????????i++;
????????????????????????}
????????????????????????else
????????????????????????{
????????????????????????????using (DataTable dt = DataProvider.GetUserLoginInfo(email))
????????????????????????????{
????????????????????????????????if (dt.Rows.Count > 0)
????????????????????????????????{
????????????????????????????????????disksize = Convert.ToDouble(dt.Rows[0]["disksize"].ToString());
????????????????????????????????????spentsize = disksize - Convert.ToDouble(dt.Rows[0]["spentsize"].ToString());
????????????????????????????????}
????????????????????????????}
????????????????????????????if (sFilesize < spentsize)
????????????????????????????{
????????????????????????????????string sFilename = Guid.NewGuid().ToString();
????????????????????????????????Fileinfo fi = new Fileinfo();
????????????????????????????????fi.Userid = userid;
????????????????????????????????fi.Foldersid = Foldersid;
????????????????????????????????fi.Extension = Extension;
????????????????????????????????fi.FileName = fileName;
????????????????????????????????fi.Filesize = sFilesize.ToString();
????????????????????????????????fi.Fileserver = sFilesserver;
????????????????????????????????fi.Diskpath = sFilepath + sFilename + Extension;
????????????????????????????????postedFile.SaveAs(fi.Diskpath);
????????????????????????????????if (!DataProvider.SetInFile(fi))
????????????????????????????????{
????????????????????????????????????Utils.FileDelete(fi.Diskpath);
????????????????????????????????????sb.Append(i.ToString() + "、文件“" + fileName + "”上傳失敗。\\r\\n");
????????????????????????????????????i++;
????????????????????????????????}
????????????????????????????}
????????????????????????????else
????????????????????????????{
????????????????????????????????sb.Append("您的空間已滿,請升級再上傳!");
????????????????????????????????break;
????????????????????????????}
????????????????????????}
????????????????????}
????????????????}
????????????????string para = "ConFileList.aspx";
????????????????string strMessage = "溫馨提示:";
????????????????StringBuilder java = new StringBuilder();
????????????????if (sb.Length > 0)
????????????????{
????????????????????strMessage += "\\r\\n\\r\\n" + sb.ToString();
????????????????????java.AppendLine("parent.Up.revert();");
????????????????????java.AppendLine("setTimeout(\"window.location.href = 'UpLoadFile.aspx';\", 1000);");
????????????????}
????????????????else
????????????????{
????????????????????strMessage += "您所選擇的文件已全部上傳完畢。";
????????????????????java.AppendLine("parent.Up.Completes('complete," + HttpUploadModule.TotalBytes + "," + HttpUploadModule.TotalBytes + "');");
????????????????????java.AppendLine("parent.Up.closeup('" + para + "');");
????????????????????java.AppendLine("setTimeout(\"window.location.href = 'UpLoadFile.aspx';\", 1500);");
????????????????}
????????????????Utils.javaFunction(strMessage, java.ToString());
????????????}
????????????catch (Exception ex)
????????????{
????????????????throw new Exception(ex.Message + ex.StackTrace);
????????????}
????????}
????}
}
后臺進度條狀態:Progress.aspx
程序代碼
using System;
using System.Web;
using WDMM.Common;
using WDMM.Web.UpLoad;
namespace WDMM.Web.UpLoad
{
????/// <summary>
????/// Progress.aspx 頁面處理
????/// </summary>
????public class UploadProgress : WDMM.Common.BasePage
????{
????????private string strResult = "";
????????protected void Page_Load(object sender, EventArgs e)
????????{
????????????Progress progress = HttpUploadModule.GetProgress(Utils.GetRequestQueryString("UploadID"), Application);
????????????if (progress != null)
????????????{
????????????????if (progress.State == UploadState.ReceivingData)
????????????????{
????????????????????strResult = "send," + progress.ContentLength;
????????????????????strResult += "," + progress.BytesRead;
????????????????}
????????????????else if (progress.State == UploadState.Complete)
????????????????{
????????????????????strResult = "complete," + progress.ContentLength;
????????????????????strResult += "," + progress.BytesRead;
????????????????}
????????????????else
????????????????{
????????????????????strResult = "error,-1,0";
????????????????}
????????????}
????????????Response.Clear();
????????????Response.Write(strResult);
????????????Response.End();
????????}
????}
}
前臺Ajax獲取上傳進度計算相關數據:Common.js
程序代碼
var bTimer = 0;
var eTimer = 0;
var mInutes = 0;
var hh = 0;
var mm = 0;
var ss = 0;
var uptime = null;
var Up =
{
?? Init : function(sType)
?? {
??????parent.$('upType').value = sType;
??????bTimer = new Date();
??????parent.$('WodemimiUpload').style.display = 'block';
??????parent.$('Status').innerHTML = '正在分析,請稍候。。。';
??????setMediacy('WodemimiUpload');
??????setTimeout('Up.Progress()', 1500);
?? }
?? ,
?? Progress : function()
?? {
??????var strurl = url + '&type=start&time=' + Ajax.getDatetime();
??????new Ajax.Request(strurl,
??????{
???????? method : 'get',
???????? onSuccess : function(sResult)
???????? {
????????????Up.LoadData(sResult.responseText);
???????? }
??????}
??????);
?? }
?? ,
?? LoadData : function(result)
?? {
??????var myArray = result.split(',');
??????var Percent = 0;
??????eTimer = new Date();
??????mInutes = Math.round((eTimer.getTime() - bTimer.getTime()) / 1000);
??????switch (myArray[0])
??????{
???????? case 'send' :
???????? Percent = (myArray[2] / myArray[1] * 100).toFixed(2);
???????? parent.$('TotalBytes').innerHTML = GetFileSize(myArray[1], 2);
???????? parent.$('ReadBytes').innerHTML = GetFileSize(myArray[2], 2);
???????? parent.$('Status').innerHTML = '已經上傳:';
???????? parent.$('AverageBytes').innerHTML = GetFileSize(myArray[2] / mInutes, 2);
???????? parent.$('SpareHour').innerHTML = GetTimer(myArray[1], myArray[2], mInutes);
???????? parent.$('Percent').style.width = Percent + '%';
???????? parent.$('PercentNumber').innerHTML = Percent + '%';
???????? parent.$('WDMMUpLoad').innerHTML = '<font color="#007500"><strong>顯示上傳('
???????? + '<font color="#FF6A00">' + Percent + '%</font>)</strong></font> | ';
???????? break;
???????? case 'complete' :
???????? Up.Complete(result);
???????? Up.clearTime();
???????? break;
???????? case 'error' :
???????? alert(result);
???????? break;
??????}
??????uptime = window.setTimeout('Up.Progress()', 1000);
?? }
?? ,
?? clearTime : function()
?? {
??????if(uptime != null)
??????{
???????? window.clearTimeout(uptime);
???????? uptime = null;
??????}
?? }
?? ,
?? Complete : function(result)
?? {
??????var myArray = result.split(',');
??????parent.$('TotalBytes').innerHTML = GetFileSize(myArray[1], 2);
??????parent.$('ReadBytes').innerHTML = '';
??????parent.$('Status').innerHTML = '上傳完畢,加密處理中。。。';
??????parent.$('SpareHour').innerHTML = '00:00:00';
??????parent.$('Percent').style.width = '100.00%';
??????parent.$('PercentNumber').innerHTML = '100.00%';
??????parent.$('WDMMUpLoad').innerHTML = '<font color="#007500"><strong>顯示上傳(<font color="#FF6A00">'
??????+ '100.00%</font>)</strong></font> | ';
??????setTimeout('parent.Util.condisk();', 2000);
?? }
?? ,
?? Completes : function(result)
?? {
??????var myArray = result.split(',');
??????$('TotalBytes').innerHTML = GetFileSize(myArray[1], 2);
??????$('ReadBytes').innerHTML = '';
??????$('Status').innerHTML = '上傳完畢,加密處理中。。。';
??????$('SpareHour').innerHTML = '00:00:00';
??????$('Percent').style.width = '100.00%';
??????$('PercentNumber').innerHTML = '100.00%';
??????$('WDMMUpLoad').innerHTML = '<font color="#007500"><strong>顯示上傳(<font color="#FF6A00">100.00%'
??????+ '</font>)</strong></font> | ';
?? }
?? ,
?? closeup : function(para)
?? {
??????switch($('upType').value)
??????{
???????? case '02' :
???????? setTimeout('menu.active(\'list_02\', \'' + para + '\');', 1500);
???????? break;
???????? case '03' :
???????? setTimeout('menu.active(\'list_03\', \'' + para + '\');', 1500);
???????? break;
???????? case '04' :
???????? setTimeout('menu.active(\'list_04\', \'' + para + '\');', 1500);
???????? break;
??????}
??????Up.revert();
?? }
?? ,
?? revert : function()
?? {
??????$('WodemimiUpload').style.display = 'none';
??????$('WDMMUpLoad').style.visibility = 'hidden';
??????$('WDMMInfobar').style.display = 'none';
??????$('TotalBytes').innerHTML = '0.00 KB';
??????$('ReadBytes').innerHTML = '0.00 KB';
??????$('Status').innerHTML = '準備就緒。';
??????$('SpareHour').innerHTML = '00:00:00';
??????$('Percent').style.width = '0.00%';
??????$('PercentNumber').innerHTML = '0.00%';
??????$('WDMMUpLoad').innerHTML = '<font color="#007500"><strong>顯示上傳(<font color="#FF6A00">00.00%'
??????+ '</font>)</strong></font> | ';
??????$('upType').value = '00';
??????setTimeout('Util.condisk();', 3000);
?? }
?? ,
?? showhideup : function()
?? {
??????if($('WodemimiUpload').style.display != 'block')
??????{
???????? $('WodemimiUpload').style.display = 'block';
???????? $('WDMMUpLoad').style.visibility = 'hidden';
???????? $('WDMMInfobar').style.display = 'none';
??????}
??????else
??????{
???????? $('WodemimiUpload').style.display = 'none';
???????? $('WDMMUpLoad').style.visibility = 'visible';
???????? $('WDMMInfobar').style.display = 'block';
???????? $('WDMMInfobar').style.left = (document.body.clientWidth / 2 - $('WDMMInfobar').clientWidth
???????? / 2) + 'px';
???????? setTimeout('Up.hideinfo()', 3000);
??????}
?? }
?? ,
?? showup : function()
?? {
??????if($('WodemimiUpload').style.display != 'block')
??????{
???????? $('WodemimiUpload').style.display = 'block';
???????? $('WDMMUpLoad').style.visibility = 'hidden';
???????? $('WDMMInfobar').style.display = 'none';
??????}
?? }
?? ,
?? hideup : function()
?? {
??????if($('WodemimiUpload').style.display != 'none')
??????{
???????? $('WodemimiUpload').style.display = 'none';
???????? $('WDMMUpLoad').style.visibility = 'visible';
???????? $('WDMMInfobar').style.display = 'block';
???????? $('WDMMInfobar').style.left = (document.body.clientWidth / 2 - $('WDMMInfobar').clientWidth
???????? / 2) + 'px';
???????? setTimeout('Up.hideinfo()', 3000);
??????}
?? }
?? ,
?? hideinfo : function()
?? {
??????$('WDMMInfobar').style.display = 'none';
?? }
?? ,
?? stopup : function()
?? {
??????var sid = 'up_' + $('upType').value + '_tb';
??????if( ! confirm('溫馨提示:我的秘密上傳運行中,關閉則需要重新上傳。'))
??????{
???????? return;
??????}
??????Up.revert();
??????menu.refurbish();
??????setTimeout('menu.deltable(\'' + sid + '\')', 1000);
??????return;
?? }
}
;
轉自:http://www.80600.net/article.asp?id=163
轉載于:https://www.cnblogs.com/gllgsoft/archive/2010/07/09/1774540.html
總結
以上是生活随笔為你收集整理的ASP.Net上传文件带进度条、显示剩余时间!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 「已解决」半跑马拉松是多少公里
- 下一篇: 对象设计的艺术