2017-07-25 54 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,密钥);