- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一些帮助,澄清如何将 HttpAsyncClient 与多部分实体一起使用。基本上,我正在尝试使用 HttpAsyncClient 将文件 (byte[]) 的内容上传为 MultiPart Body。我如何使用它的示例:
CloseableHttpAsyncClient httpAsyncClient = HttpAsyncClients.createDefault();
httpAsyncClient.start();
MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create();
reqEntity.addPart("file",new ByteArrayBody(Base64.decodeBase64(fileContent),"");
reqEntity.addPart("fileSize",new StringBody("1234"));
reqEntity.addPart("fileName",new StringBody("xyz.txt"));
reqEntity.addPart("fileType",new StringBody("text/plain"));
reqEntity.addPart("SEQ_NUM",new StringBody("23432"));
HttpPost httppost = new HttpPost(endpointUrl);
httppost.setEntity(reqEntity.build());
Future<HttpResponse> future = httpAsyncClient.execute(httppost, null);
httpAsyncClient.close();
以下是为此实现添加到项目中的 Pom 依赖项:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.6</version>
</dependency>
现在,我被阻塞在抛出以下异常的地方:
java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException: Multipart form entity does not implement #getContent()
我在 Internet 上进行了大量搜索,但几乎找不到关于新 HttpAsyncClient 实现的详细信息。我发现一些用户被问到类似的问题,但没有一个解决方案适合我。
[HttpAsyncClient 多部分实体不工作?]在下面的链接中,用户建议用 BufferedHttpEntity 包装 MultipartEntity 实例。所以,我更新了代码如下(不确定它是否正确)但仍然是相同的异常。
CloseableHttpAsyncClient httpAsyncClient = HttpAsyncClients.createDefault();
httpAsyncClient.start();
MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create();
reqEntity.addPart("file",new ByteArrayBody(Base64.decodeBase64(fileContent),"");
reqEntity.addPart("fileSize",new StringBody("1234"));
reqEntity.addPart("fileName",new StringBody("xyz.txt"));
reqEntity.addPart("fileType",new StringBody("text/plain"));
reqEntity.addPart("SEQ_NUM",new StringBody("23432"));
HttpPost httppost = new HttpPost(endpointUrl);
httppost.setEntity(new BufferedHttpEntity(reqEntity.build()));
Future<HttpResponse> future = httpAsyncClient.execute(httppost, null);
httpAsyncClient.close();
如果您能帮助确定原因,我将不胜感激。
引用资料:
最佳答案
MultipartFormEntity 不能异步使用。其中一个选项是将实体写出到 ByteArrayOutputStream 并从中创建一个 NByteArrayEntity。
File file = new File(filePath);
ByteArrayBody body;
body = new ByteArrayBody(FileUtils.readFileToByteArray(file), file.getName());
HttpEntity mEntity = MultipartEntityBuilder.create()
.setBoundary("-------------" + boundary)
.addPart("file", body)
.build();
ByteArrayOutputStream baoStream = new ByteArrayOutputStream();
mEntity.writeTo(baoStream);
HttpEntity nByteEntity = new NByteArrayEntity(baoStream.toByteArray(), ContentType.MULTIPART_FORM_DATA);
httppost.setEntity(nByteEntity );
关于apache-httpcomponents - 使用多部分实体实现 HttpComponent 的 HttpAsyncClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29104778/
我正在测试 Apache HttpAsyncClient ,特别是我想在需要身份验证的地方发出异步 HTTP POST 请求。我用this example作为引用。到目前为止,我找到了如何设置应用程序
我正在尝试在 httpAsyncClient 库中设置 cookie,但问题是我不知道如何找到它的示例..这是我的代码。 public JSONArray sendRequest(List post
我想了解有关 HttpAsyncClient 的一些基本概念。 我这里没有使用连接池,这里关闭失败的http请求的正确方法是什么(1)或(2)。 如果我用每个新请求初始化 httpclient,会对性
我想向 java 中的 servlet 发送异步 post 请求。我正在使用 apache HttpAsyncClient,如以下方法所示。当我调试时,我看到调用此方法的进程会等待,直到被调用的 se
我正在尝试使用 HttpAsyncClient 通过每秒提交一百或一千个 HTTP 请求并对每个请求的响应进行计时来对我的 Web 应用程序进行压力测试。我的代码基于 this quickstart
使用典型的 HttpAsyncClients 示例: public class AsyncClientHttpExchange { public static void main(final
在 Linux 上运行时(仅在 Linux 上尝试过),根据 lsof,以下代码似乎泄漏了 1 个 anon_inode 和 2 个管道文件描述符: CloseableHttpAsyncClient
我需要在高负载下使用 HttpAsyncClient。我这样创建 HttpAsyncClient: RequestConfig requestConfig = RequestConfig.custom
我想实现一个基于 NIO 的 aws java 客户端并且正在考虑使用 HttpAsyncClient但它处于 Alpha 3 阶段。有没有人有在任何负载下使用客户端的经验?另外,我们什么时候可以期待
我在 httpasyncclient 上使用代理,如下所示: final CloseableHttpAsyncClient httpclient = HttpAsyncClients
我的应用程序必须提供请求“转发”机制,从某种意义上说,它处理传入的请求并通过从根据请求确定的“目标”系统之一检索数据来响应它。这是通过 HttpAsyncClient 的集合来实现的,每个 HttpA
在 HttpClient 的早期版本中,目标主机被设置为客户端本身。在上一个版本中(对于 HttpAsyncClient,它是 4.1.1)主机被设置为 HttpRequest(HttpGet、Htt
与这个问题密切相关:How to use HttpClient with multithreaded operation? ,我想知道 apache HttpAsyncClient 是否是线程安全的,
使用 Apache HttpAsyncClient Beta3,当我将它加载到各种服务器的多达 50 个并发请求时,它似乎开始时很好,我处理了大约 3000 个 url。 但后来我遇到了瓶颈,我通过日
我是否需要像使用 HttpClient 那样关闭 Apache HttpAsyncClient 中的过期连接? 最佳答案 我只是仔细检查了源代码。是的,仍然必须明确地从池中驱逐过期的连接。但是,底层的
我正在用 Java 实现网络抓取工具。在尝试了一些我要抓取的网站之后,我想使用 Java 中并发 HTTP 连接的最佳实践。我目前正在使用 Jsoup's连接方法。我想知道是否可以创建线程并在这些线程
在我的 servlet 中,我正在执行以下代码: RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(3000)
package com.lt.uadb.app.resource.test; import java.util.concurrent.Future; import org.apache.http.Ht
我正在使用 HttpAsyncClient 和 Jsoup 为特定站点编写网络抓取工具。我正在使用 HttpAsyncClient 的一个实例,它执行来自不同线程的多个请求。在几次成功的请求之后,客户
我正在尝试通过 Java 使用 ElasticSearch REST API Apache HttpAsyncClient图书馆。我想使用持久流水线连接。这是一些测试代码(输出在注释中): @Test
我是一名优秀的程序员,十分优秀!