2009-06-24 51 views
16

好吧,這可能看起來有點像noob問題,但是我知道很多Web開發人員並沒有完全理解。Http和文件上傳 - 它是如何工作的(引擎蓋下)

基本上如何做從網頁文件輸入框中輸入文件上傳到Web服務器(託管例如.NET網站)與FileUpload控件的事件上傳?

我的理解是一個職位是向服務器發出請求流,然後將其傳回數據的瀏覽器和流媒體服務器開始。

我的朋友說,他的理解是,整個文件被編碼成由瀏覽器和(塊狀)職位的崗位要求,然後發送到服務器。

我認爲這不可能是這樣的,因爲如果沒有辦法構建ajax進度條,服務器將無法做任何事情,直到它收到完整的帖子,以及將文件保存到磁盤。

那麼它究竟是如何從瀏覽器到服務器?

+2

這是一個有效的問題。 +1 – samoz 2009-06-24 15:38:13

回答

9

你的朋友是對的。如果你想要一個AJAX進度條,你必須跳過一些箍。

通常技術是將上傳到iframe中的上傳到服務器上的IHttpHandler,該服務器在服務器範圍內的字典中存儲服務器上的進度,該字典由客戶端組成的標識符進行鍵入,幷包含在AJAX進度請求和上傳文章。這樣,當客戶端發出AJAX請求時,處理該請求的服務器代碼可以讀取該字典中的值,以查看服務器已處理的文件POST請求的字節數。

是的,它很複雜:)

7

我認爲你的朋友是對的,該文件被編碼爲發送到服務器的帖子。如果您真的想看到它的工作原理,請嘗試在Firefox中使用Tamper Data查看實際的發佈數據。

ETA:

的AJAX風格的上傳你提到做一個隱藏的iframe的訊息,然後使用AJAX請求來檢查服務器端上傳進度的工作。

+0

確定我的伴侶在說什麼我非常確定是對的,但是無論如何,這個人必須在它能夠做任何事情之前收到帖子?無論如何,這一次它擁有整個職位。或者一個httphandler在網絡層面上工作,並攔截數據包,你可以進一步解釋一下嗎? – Sheff 2009-06-24 15:53:05

+1

有些服務器可以在讀取頭之後但讀取數據之前開始處理請求。我使用的一些框架將請求的主體作爲流(除非頭文件等被解析)。當然,大多數請求處理程序在請求被完全讀取之前不會發送回應。 – 2009-06-24 16:12:53

相關問題