[英]File upload progress bar in ASP.NET 2.0
我在.NET網站上上傳了文件。 我使用FileUpload .NET控件進行上載,並將表單的目標設置為隱藏的iframe。 我使用客戶端腳本提交表單,然后在頁面上顯示進度條,該進度條向同一服務器上的ashx文件發出AJAX請求,並每秒更新進度條。
這是文件上傳時間的部分代碼-
string fileString = StringGenerator.GenerateString(8);
System.IO.Stream fileStream = System.IO.File.Create(fileRoot+ fileString + ".mp3");
System.IO.Stream inputStream = fileUpload.PostedFile.InputStream;
byte[] buffer = new byte[256];
int read;
if(StaticProgress.Progress.ContainsKey(trackId)) StaticProgress.Progress[trackId] = 0d;
else StaticProgress.Progress.Add(trackId, 0d);
int totalRead = 0;
long length = inputStream.Length;
while ((read = inputStream.Read(buffer, 0, buffer.Length)) > 0)
{
totalRead += read;
fileStream.Write(buffer, 0, read);
StaticProgress.Progress[trackId] = (double)totalRead / (double)length;
}
StaticProgress.Progress是一個返回靜態Dictionary的屬性。 這是ashx文件中的代碼,可獲取
context.Response.ContentType = "text/javascript";
int id;
if(!int.TryParse(context.Request.QueryString["id"], out id) || !StaticProgress.Progress.ContainsKey(id))
context.Response.Write("{\"error\":\"ID not found\"}");
else
context.Response.Write("{\"id\":\"" + id + "\",\"decimal\":" + StaticProgress.Progress[id] + "}");
在這里,當文件上傳時,我總是“找不到ID”,但是當文件上傳完成時,我得到了成功-小數:1。
在此之前,我嘗試使用會話變量並獲得相同的結果。 我嘗試使用公共靜態(線程安全嗎?)字典,但得到的結果相同。 以前有沒有人遇到過這樣的事情? 在完全收到客戶請求之前,代碼不會執行嗎?
標准文件上傳控件不提供進度功能-在服務器完全接收文件之前,它不會接收文件。 當您在.PostedFile上打開流時,該文件已完全上傳。
有許多在上傳討論更好的解決方案的在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.