使用上傳檔案最大的優勢在於程式設計方便,幾乎各種伺服器端技術都對這種上傳方式做了良好的封裝,使得程式設計師能夠直觀地對客戶端上傳的檔案進行處理。不過總體來說,這個協議並不適合做檔案傳輸,解析資料流內容的代價相對較高,並且沒有一些例如斷點續傳的機制來輔助,導致在上傳大檔案時經常會力不從心
。有朋友認為使用上傳檔案最大的問題在於記憶體占用太高,由於需要將整個檔案載入記憶體進行處理,導致如果使用者上傳檔案太大,或者同時上傳的使用者太多,會造成伺服器端記憶體耗盡。這個觀點其實是錯誤的。對於某些伺服器端的技術,例如spring framework,或者早期asp.net 1.1時,為了供程式處理,都會將使用者上傳的內容完全載入記憶體,這的確會帶來問題。但是其實協議本身並沒有規定伺服器端應該使用何種方式來處理上傳的檔案。例如在現在的asp.net 2.0中就已經會在使用者上傳資料超過一定數量之後將其存在硬碟中的臨時檔案中,而這點對於開發人員完全透明,也就是說,開發人員可以像以前一樣進行資料流的處理。
asp.net 2.0啟用硬碟臨時檔案的閾值(threshold)是可配置的:
maxrequestlength自不必說,剛接觸asp.net的朋友總會發現上傳檔案不能超過4m,這就是因為maxrequestlength的大小預設為4096,這就限制著每個請求的大小不得超過4096kb。這麼做的目的是為了保護應用程式不受惡意請求的危害。當請求超過maxrequestlength之後,asp.net處理程式將不會處理該請求。這裡和asp.net丟擲乙個異常是不同的,這就是為什麼如果使用者上傳檔案太大,看到的並非是asp.net應用程式中指定的錯誤頁面(或者預設的),因為asp.net還沒有對這個請求進行處理。requestlengthdiskthreshold就是剛才所提到的閾值,其預設值為256,即乙個請求內容超過256kb時就會啟用硬碟作為快取。這個閾值理論
上和客戶端是否是在上傳內容無關,只要客戶端發來的請求大於這個值即可。因此,在asp.net 2.0中伺服器的記憶體不會因為客戶端的異常請求而耗盡。
如果我們需要在asp.net(如果沒有特別說明,以下asp.net均指asp.net 2.0)應用中上傳檔案,我們一般就會直接使用控制項進行檔案上傳。如果乙個頁面中存在控制項,那麼頁面中form元素的enctype就會被自動改為multipart/form-data,而且我們可以在頁面postback之後通過控制項的引用來獲得客戶端通過該控制項所上傳得檔案。不過,如果上傳檔案的功能需要較為特別的需求——例如需要進度條提示,控制項就無能為力
了。確切地說,應該是所能提供的支援非常有限,因此一些特殊需求我們不能實現——嚴格說來,應該是無法輕易地、直接地實現。這樣,在實現這些功能時,我們就會繞乙個大大的彎。為了避免每次實現相同功能時都要費神費時地走一遍彎路,因此出現了各種上傳元件。上傳元件提供了封裝好的功能,使得我們在實現檔案上傳功能時變得輕鬆了很多。例如幾乎所有的上傳元件都直接或間接地提供了進度提示的功能,有的提供了當前的百分比數值,有的則直接提供了一套ui;有的元件只提供了簡單的ui,有的卻提供了一整套上傳、刪除的管理介面。此外,有的元件還提供了防止客戶端惡意上傳的能力。
WebService接收上傳檔案想法
使用上傳檔案最大的優勢在於程式設計方便,幾乎各種伺服器端技術都對這種上傳方式做了良好的封裝,使得程式設計師能夠直觀地對客戶端上傳的檔案進行處理。不過總體來說,這個協議並不適合做檔案傳輸,解析資料流內容的代價相對較高,並且沒有一些例如斷點續傳的機制來輔助,導致在上傳大檔案時經常會力不從心 有朋友認為使...
php接收上傳檔案
單檔案上傳 name files file name echo name.echo files file size echo files file type echo files file error move uploaded file files file tmp name files file...
PHP接收上傳檔案
這星期一直再搞php,涉及到檔案上傳的部分有些遺忘,這裡記錄一下 用html的表單模擬乙個檔案上傳的post請求,如下 file upload 注意 要確保檔案上傳表單的屬性是enctype multipart form data 否則檔案上傳不了 首先,需要解釋一下php的全域性變數 files,...