我尝试在使用 HttpClient
4.3.3 和 MultipartEntityBuilder
上传文件时实现进度
所以实际上我用下面的代码执行了一个post请求
HttpClientBuilder builder = HttpClientBuilder.create();
HttpClient httpClient = builder.build();
HttpPost httpPost = new HttpPost(uploadUrl);
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.addPart("filea", new FileBody(filea));
entityBuilder.addPart("fileb", new FileBody(fileb));
final HttpEntity entity = entityBuilder.build();
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
知道如何从上传中获取实际进度吗?我搜索了很多 - 但示例是针对 android 而不是普通 java 或旧版本的 HttpClient
并且对我不起作用...
最佳答案
我刚刚找到了解决方案:
您需要一个 HttpEntityWrapper
来计算已处理的字节数并有一个回调。
ProgressHttpEntityWrapper.ProgressCallback progressCallback = new ProgressHttpEntityWrapper.ProgressCallback() {
@Override
public void progress(float progress) {
//Use the progress
}
}
httpPost.setEntity(new ProgressHttpEntityWrapper(entityBuilder.build(), progressCallback));
这里是 ProgressHttpEntityWrapper
的完整代码:https://github.com/x2on/gradle-hockeyapp-plugin/blob/master/src/main/groovy/de/felixschulze/gradle/util/ProgressHttpEntityWrapper.groovy
此解决方案的主要来源:https://stackoverflow.com/a/7319110/268795
关于java - 带有进度和 MultipartEntityBuilder 的 HttpClient Post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22932821/