2011-02-17 85 views
1

我正在嘗試執行ajax文件上傳和實時進度條 我已經在localhost中測試過它,它工作完美 但是當我嘗試在它上面進行測試時在上傳文件結束時,在線Web服務器欄無法工作, 當我在上傳循環結束時放入System.Threading.Sleep(值), 酒吧工作但上傳速度很慢,asp.net ajax上傳文件實時進度條無法正常工作

我該如何解決這個問題?

我使用的步驟:

  1. 構建IFRAME(點Upload.aspx)和裏面的文件上傳。

  2. 在頁面加載JavaScript函數的iframe頁面調用window.parent.register(表單)函數,該函數將iframe格式判斷爲父頁面中的JavaScript變量。

  3. 在父頁面(Default.aspx)中,我放置了一個按鈕,然後onclick被預測的iframe表單被submited。然後javascript間隔每調用一次ajax回調函數(1000ms)。

  4. 此函數(ajax回調函數)正在監視會話[「UploadInfo」]。

  5. 當iframe表單提交iframe頁面時,它會調用從(fileUpload.PostedFile.InputStream.Read(bytes,0,1);)中讀取while循環中文件的DoUpload()方法;然後將字節添加到特定路徑中,並將(1)添加到會話[「UploadInfo」](增加了進度條)。

  6. 我想讓DoUpload和ajax回調函數同步工作。

  7. 當我運行在localhost的網站每一件事工程完全按照我期望的,但是,當從網站上運行該進度條不工作。

注意:當我在while循環中放置System.Threading.Thread.Sleep(100)時,進度條可以工作,但速度很慢。

+0

有沒有可用的代碼?你用什麼控制? – Aristos 2011-02-17 17:37:09

回答

1

嗨我找到你的答案,同時我搜索一個非閃存文件上傳解決方案進度條和文件大小驗證。

一般而言,您需要像客戶端瀏覽器和服務器端一樣的flash或java applet。

但是,我正在尋找你已經嘗試的確切解決方案。

你試過很好,但問題出在實現邏輯上。你非常瞭解Javascript不能訪問本地文件系統。所以你依靠AJAX獲取服務器端代碼來告訴你接收/上傳文件的數量。

對計算文件大小的文件進行異步調用是個不錯的主意。要理解你面臨的問題,你需要了解它的工作方式。

文件上傳將使用位於瀏覽器端的流式讀取器和流式寫入器在服務器端的文件系統中進行。您可能還需要考慮對於服務器的多個AJAX請求非常重要的相同的源策略。

通過HTTP 1.1規範,任何瀏覽器將只同時向服務器拋出2個並行連接。換句話說,只能從相同的域名下載2個資源。

請檢查這些選項,併發布您的答覆。最好去一個組件。我正在使用Obout文件上傳器(http://www.obout.com/Obout.Ajax.UI/FileUpload/)。我工作很好很多年。現在我需要根據客戶要求減少閃存組件。否則,它是我用於文件上傳的最好的ASP.NET組件。