2010-01-07 22 views
4

我有一個網頁,我希望人們能夠上傳內容。 (只有少數人使用它,因爲它是訪問受限的,所以我不擔心任何DOS類型的攻擊。)FileUpload控件的進度指示

我正在使用fileUpload控件來執行此操作:

protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (fileUploader.HasFile) 
     try { 
      fileUploader.SaveAs(Server.MapPath("Uploads\\") + fileUploader.FileName); 
      errorMessage.Text = "File name: " + 
       fileUploader.PostedFile.FileName + "<br>" + 
       fileUploader.PostedFile.ContentLength + " kb<br>"; 
     } 
     catch (Exception ex) { 
      errorMessage.Text = "ERROR: " + ex.Message.ToString(); 
     } 
     else 
     { 
      errorMessage.Text = "You have not specified a file."; 
     } 
    } 

這些文件可以達到50MB(我改變了web.config以允許這個)。我遇到的問題是,對於大文件,用戶無法看到上傳的進度。

我想知道如何在頁面上顯示進度,以便用戶可以看到發生的事情。不大驚小怪任何幻想 - 只是像:上傳

字節/總字節

就可以了。我可以使用postingFile.ContentLength獲取總字節數,但不知道如何獲取上傳的字節。

此外 - 我能夠刷新屏幕上傳發生?

乾杯,

回答

6

這個答案是不特定於ASP ...

文件上傳通常通過進行HTTP POST請求與Content-type: multipart/form-data完成。這包括請求主體其中一個部分的文件正文。

因此,在給定的瀏覽器選項卡中,在給定的時間只能加載一個頁面。簡短的回答是,除非你非常喜歡iframe(一個用於狀態,一個用於上傳),否則你將無法顯示狀態。

但是,如果你使用Flash,你可以。 http://www.uploadify.com/是一個很棒的小前端插件(用於jQuery),它允許用戶選擇多個文件,並將它們全部上傳,顯示一路上的狀態。我只是將它插入一個限制上傳到64M的站點。工程很棒。

+0

Uploadify似乎是前進的方向(如果我可以讓它工作!) – Ben 2010-01-07 15:12:16

+0

它會工作 - 只需要一些擺弄:) – gahooa 2010-01-07 16:12:52

5

你的實現是同步操作,其不「反饋」給用戶關於文件上傳的進度。

有相當多的替代品和第三方組件,你可能想谷歌他們。

這裏是一個開始:ASP.NET File Upload with Real-Time Progress Bar

+0

我認爲該網站已被黑客入侵。是否有另一個地方可以獲得Matt Berseth的控制權? – bgmCoder 2012-04-30 19:57:57