在這周有個(gè)系統(tǒng)對(duì)接種要求采用Put上傳文件
測(cè)試中獲取本地file文件并上傳的時(shí)候沒(méi)有問(wèn)題, 而通過(guò)前臺(tái)接口選擇文件傳輸?shù)胶笈_(tái)。在通過(guò)Http上傳至文件服務(wù)器時(shí)發(fā)現(xiàn)異常情況

如圖所示,下載到本地生成文件時(shí)二進(jìn)制流中 會(huì)多處幾行內(nèi)容,這就很納悶
原先代碼采用的
multipartEntityBuilder.addBinaryBody("file", io);
HttpEntity entiy = multipartEntityBuilder.build();
httpClient.execute(httpPut)
進(jìn)行的數(shù)據(jù)封裝,之后進(jìn)行請(qǐng)求下載文件,服務(wù)器返回的二進(jìn)制流數(shù)據(jù)大小總是會(huì)比原先上傳時(shí)的內(nèi)容大??!
百思不得其解郵件編輯文件后發(fā)現(xiàn)二進(jìn)制文件頭尾多了一些內(nèi)容。
經(jīng)過(guò)一番搗鼓以后改成使用
BasicHttpEntity basicHttpEntity=new BasicHttpEntity();
basicHttpEntity.setContent(io);
再進(jìn)行
httpClient.execute(httpPut);
問(wèn)題完美解決。
原因:multipartEntityBuilder進(jìn)行數(shù)據(jù)封裝的時(shí)候會(huì)帶上請(qǐng)求頭尾(form表單提交的形式),執(zhí)行請(qǐng)求的時(shí)候這些數(shù)據(jù)會(huì)帶給服務(wù)端
改寫(xiě)成BasicHttpEntity將數(shù)據(jù)封裝在請(qǐng)求體中進(jìn)行傳輸。
再次下載的時(shí)候就不會(huì)多出頭與尾的內(nèi)容。通過(guò)下載請(qǐng)求得到的流轉(zhuǎn)成byte[]數(shù)組可以直接返回給前臺(tái)即可
至此問(wèn)題解決........特此記錄防止下次在遇到