2017-07-25 56 views
0

我有一些現有的Java代碼上傳文件(如字節數組)到Box.net,最近我認爲這將是很好的代碼升級到Apache的HttpClient 4.4。然而,這已被證明比預期的要困難一點。這是我工作的遺留代碼:使用MultipartEntityBuilder上傳文件

HttpPost postMethod = new HttpPost(url); 
MultipartEntity multipartEntity = new MultipartEntity(); 
for (NameValuePair parameter : parameters) { 
    String parameterName = parameter.getName(); 
    String parameterValue = parameter.getValue(); 
    StringBody valueBody = new StringBody(parameterValue, ContentType.MULTIPART_FORM_DATA);      
    multipartEntity.addPart(parameterName, valueBody); 
} 

Iterator iterator = byteArrayHashMap.keySet().iterator(); 
while (iterator.hasNext()) { 
    String key = (String) iterator.next(); 
    byte[] byteArray = byteArrayHashMap.get(key); 
    multipartEntity.addPart(key, new ByteArrayBody(byteArray, key)); 
} 

postMethod.setEntity(multipartEntity); 

,這裏是新的代碼:

HttpPost postMethod = new HttpPost(url); 
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create(); 
for (NameValuePair parameter : parameters) { 
    String parameterName = parameter.getName(); 
    String parameterValue = parameter.getValue(); 
    StringBody valueBody = new StringBody(parameterValue, ContentType.MULTIPART_FORM_DATA);      
    multipartEntityBuilder.addPart(parameterName, valueBody); 
} 

Iterator iterator = byteArrayHashMap.keySet().iterator(); 
while (iterator.hasNext()) { 
    String key = (String) iterator.next(); 
    byte[] byteArray = byteArrayHashMap.get(key); 
    multipartEntityBuilder.addBinaryBody(key, byteArray); 
} 

postMethod.setEntity(multipartEntityBuilder.build()); 

當我運行新代碼,服務器缺少參數的抱怨。我是否正確地使用MultipartEntityBuilder?

+0

如果有人遇到這個問題,我可以通過更新addBinaryBody調用來設置ContentType來解決此問題,如下所示:multipartEntityBuilder.addBinaryBody(key,byteArray,ContentType.DEFAULT_BINARY,key); – user304582

回答

0

在任何人的情況下跨該問題絆倒,我能夠通過更新addBinaryBody呼叫設置的ContentType如下來解決這個問題:multipartEntityBuilder.addBinaryBody(鍵,字節組,ContentType.DEFAULT_BINARY,密鑰);