2011-05-12 19 views
0

我試圖使用Apache Commons的HttpClient以二進制文件和幾個字符串參數發送多部分POST請求。HTTPClient MultipartEntity似乎將亂碼文本添加到StringBody部分

但是,似乎在某處沿線某些垃圾文本正在進入我的字符串參數。舉例來說,如通過調試證實,這裏的sizeBody變量確實抱着值「100」:

StringBody sizeBody = new StringBody("100", Charset.forName("UTF-8")); 

但是,如果我聽使用Wireshark的要求,我看到:

--o2mm51iGsng9w0Pb-Guvf8XDwXgG7BPcupLnaa 
Content-Disposition: form-data; name="x" 
Content-Type: text/plain; charset=UTF-8 
Content-Transfer-Encoding: 8bit 

100 
a5 

--o2mm51iGsng9w0Pb-Guvf8XDwXgG7BPcupLnaa 

請注意100之後的a5

這可能是什麼原因造成的?我應該在哪裏看?

回答

0

我有同樣的問題測試我的職位與NanoHTTPD應保盡保。這確實是HttpClient使用分塊傳輸編碼,NanoHTTPD不支持。它在我的情況下是這樣做的,因爲二進制文件是通過InputStreamBody提供的,並且由於無法確定其自身的內容長度(它只發回-1),所以客戶端使用分塊編碼。

我切換到使用ByteArrayBody作爲文件內容,並且由於該文件和StringBody可以提供內容長度,所以請求現在不使用分塊編碼。

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
IOUtils.copy (fileInputStream, baos); // from Apache Commons IO, or roll your own 
ContentBody filePart = new ByteArrayBody (baos.toByteArray(), fileName); 

當然,如果你的文件很大,像上面那樣將整個文件加載到一個字節數組中可能會導致內存問題。

相關問題