java - 带有进度和 MultipartEntityBuilder 的 HttpClient Post

标签 java progress apache-httpclient-4.x

我尝试在使用 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/

相关文章:

java - 使用 keytab 文件连接到 Impala 的 jdbc URL

javascript - 更新 JavaScript 函数中的进度指示器

jquery - HTML 加载动画

PHP session 上传进度为空

java - SSLHandshakeException 致命警报 : handshake_failure

java - Apache http 客户端 -> 本地地址绑定(bind) -> 一段时间后发生 BindException

java - 使用 HttpClient 4.2 从失败的连接尝试中获取服务器证书

java - 将 Java 字符串传递给 Javascript

java - 以编程方式用 Java 替换 JavaScript 方法

java - 在服务或 servlet 中重新使用 com.google.gson.Gson 对象?