企業應用中會經常用到基于Http的檔案上傳,其中Multipart是多檔案上傳所使用的,在用JAVA開發時有時會用第三方類庫來拼HTTP封包,有時則手動組裝,
然後手動組裝前先要了解一下封包的格式,如下是HTTP的封包頭:
重點是:
其中Content-Type決定了封包的類型,boundary則用于分隔各條目項。
示例如下:
對于multipart的解析我用的是apache的commons-fileupload-1.3.jar,demo如下:
其中判斷類型的代碼如下:
有一點需要注意的是,upload.parseRequest(request)方法裡的源碼是這樣的:
也就是說如果兩個boundary之間是空的,就認為到eof了,也就是結束了往下的周遊,因為在實際的使用當中,我在拼封包時不小心在兩個條項目中多加了一個boundary,這時後面的條項目就取不到了,這個問題讓我糾結了半天,覺得很詭異,後來讀源碼才發現,原來如此。
如果使用第三方的類庫就不會有此煩惱了,我用的是apache的httpmime-4.2.2.jar,測試的代碼如下:
測試的過程中我用的抓包工具是Wireshark,界面如下:

圖1--Wireshark界面
檢視到的TCP流如下:
圖2--TCP流
最後總結一下:multipart/form-data對于多檔案上傳還是很好用的