1. 程式人生 > >使用HTML的表單form上傳檔案,需要考慮的幾個問題

使用HTML的表單form上傳檔案,需要考慮的幾個問題

應用系統中經常需要有檔案上傳功能,一般的做法都是使用HTML的<form>和<input type="file">,或者使用第三方檔案上傳元件,如swfupload和uploadify。我們都知道如果向伺服器提交資料,一般來說都是使用POST請求,請求資料會放在請求體中,以key1=value1&key2=value2的形式。這樣的報文,伺服器是很容易解析的。如果是上傳檔案,通過httpwatch抓包工具,我們可以發現:檔案的內容也是放在post請求體中的。

我們知道,提交一個form的時候,可以同時上傳檔案和提交引數值。這就引出了一個問題:請求引數值和檔案內容都是在post請求體中的,伺服器必須要能識別報文中,哪些是引數值,哪些是檔案內容?http協議是怎麼解決這個問題的呢?可以檢視rfc1867文件:

Form-based File Upload in HTML。還有下面的2篇部落格

很好的講解了實現細節。如果了些報文細節,我們就可以使用HttpClient等開源元件,自行構建請求報文,實現檔案上傳。我們知道http請求是無狀態的,連線保持時間不能太長。因此如何實現高效、健壯的檔案上傳,需要考慮很多細節,需要了解http協議的一些頭部如ContentType,keep alive等機制。

實現了基本的上傳功能後,一般還需要考慮大檔案如何上傳?如何實現斷點上傳?如何實現非同步上傳?多檔案一起上傳?等等。