2010-01-07 116 views
0

好吧,所以這裏的問題是:我正在從FileUpload控件讀取流,讀取n個字節的塊並在循環中寫入數組,直到到達流的末尾。ASP.net文件操作延遲

現在我這樣做的原因是因爲我需要檢查幾件事情,而上傳仍在繼續(而不是做一個Save();它一次完成整個事情)。問題來了:當從本地機器執行此操作時,可以看到該文件正好上傳並且其大小增加(必須在循環中添加Sleep();子句以實際查看正在寫入的文件)。

但是,當我從遠程機器上傳文件時,直到文件完成上傳後才能看到它。另外,隨着進度的繼續,我添加了另一個調用來將進度寫入文本文件,並且我得到相同的結果。本地:文件更新爲遠程上傳:令牌文件僅在上傳完成後出現(這在上傳仍在發生時我需要它時有點無用)。

在(或ASP.net)中是否有某種安全設置可能將文件保存在遠程計算機的臨時位置,而不是本地計算機,然後將它們移動到指定的目的地?我將它與ASP.net相比,當從本地機器瀏覽時顯示錯誤消息(甚至在公共主機名上),而不是從遠程機器瀏覽時顯示的通用編譯錯誤頁面/通用異常頁面(而customErrors不是off)

任何線索在這?

在此先感謝。

回答

0

FileUpload控件呈現爲<input type="file"> HTML元素;這樣,您的瀏覽器將打開該文件,讀取所有內容,編碼併發送它。

在IIS收到所有瀏覽器數據後,您的ASP.NET請求才會啓動。

這樣,您需要編寫一個客戶端組件(Flash,Java applet,Silverlight)以小塊發送文件並在服務器端重新構建該文件。

編輯:某些信息on MSDN

爲了控制上載的文件是否臨時存儲在存儲器中或在服務器上而被處理的請求,設置httpRuntime元素的requestLengthDiskThreshold屬性。該屬性使您能夠管理輸入流緩衝區的大小。默認是256字節。您指定的值不應超過您爲maxRequestLength屬性指定的值。

+0

所以你說的是,即使我在本地機器測試上有延遲,內容已經完全達到了IIS,我只是在內部處理已經到達的東西。 基本上我想要做的是服務器/客戶端端上傳進度指示器(這將輪詢服務器上的一些客戶端JavaScript的進展的另一頁)。 謝謝。( )另外,如果默認值已經是256字節(並且我們假設每256個字節的數據被寫入磁盤一次),這意味着這將不起作用:( 感謝您的回覆 – mtranda 2010-01-07 16:53:11

+0

說實話,我也不明白'requestLengthDiskThreshold'屬性;但是要創建上傳進度,您必須以塊的形式發送數據。 – 2010-01-07 17:05:33

+0

對我來說,特別感興趣並決定嘗試web方法的是這個jQuery庫。 .sg/misc/jQueryProgressBar/demo.php 我試圖上傳,因爲我們說,它似乎爲PHP工作 – mtranda 2010-01-07 18:03:11

0

我知道你想檢查正在上傳的文件是否爲它的內容。 如果這是你的要求,那麼爲什麼不添加一個文本框,並填寫它,而你正在從HttpPostedFile讀取文件。

+0

主要問題是,觸發器不會激活,直到請求的全部內容發送(在這個特殊情況下,整個fi樂)。我試圖做的是訪問文件數據,因爲它仍然在服務器上下載。 – mtranda 2010-01-08 14:58:14