0
我在.NET網站上有文件上傳。我使用FileUpload .NET控件進行上傳,並將表單的目標設置爲隱藏的iframe。我使用客戶端腳本來提交表單,然後在頁面上顯示一個進度條,該進度條對同一臺服務器上的ashx文件執行AJAX請求,並每秒更新一次進度條。ASP.NET 2.0中的文件上傳進度條
下面的代碼的文件時上傳的部分 -
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是返回一個靜態字典的屬性。 這裏是在ashx的文件,該文件得到我總是「ID未找到」,而該文件被上傳,但是當文件上傳完畢,我得到一個成功的
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] + "}");
這裏進步的代碼 - 十進制:1.
我試過在此之前使用會話變量,並得到了相同的結果。我試過使用公共靜態(線程安全?)字典,但我得到了相同的結果。有沒有人遇到過這樣的事情?在客戶端請求被完全接收之前,代碼是否執行?
謝謝,我會看看他們。我之前在我的搜索中看到過這個頁面,但沒有人真正解釋過,標準文件上傳控件將不允許我從輸入流中讀取,直到全部收到。所以我試圖自己做(我喜歡挑戰)。 – Connell 2011-05-09 22:54:17