簡體   English   中英

ASP.NET 2.0中的文件上傳進度欄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM