加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在客户端接收多部分响应(ClosableHttpResponse)

发布时间:2020-12-15 04:37:49 所属栏目:Java 来源:网络整理
导读:我有一个 java控制器,它必须向我发送一些文本数据和不同的字节数组.所以我正在构建n多部分请求并将其写入来自HttpServletResponse的流. 现在我的问题是如何在客户端解析响应并提取多个部分. 服务器代码链: – MultipartEntityBuilder builder = MultipartEn
我有一个 java控制器,它必须向我发送一些文本数据和不同的字节数组.所以我正在构建n多部分请求并将其写入来自HttpServletResponse的流.

现在我的问题是如何在客户端解析响应并提取多个部分.

服务器代码链: –

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        // Prepare payload
        builder.addBinaryBody("document1",file);
        builder.addBinaryBody("document2",file2);
        builder.addPart("stringData",new StringBody(jsonData,ContentType.TEXT_PLAIN));

        // Set to request body

        HttpEntity entity = builder.build();
        postRequest.setEntity(entity);

客户代码SNIPPET: –

HttpPost httpPost = new HttpPost(finalUrl);

        StringEntity entity = new StringEntity(json);
        httpPost.setEntity(entity);
        httpPost.setHeader("Content-type",APPLICATION_JSON_TYPE);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        CloseableHttpResponse response = httpClient.execute(httpPost);
        InputStream in = new BufferedInputStream(response.getEntity().getContent());

我检查了CloseableHttpResponse和HttpEntity,但它们都没有提供解析多部分请求的方法.

编辑1:
这是我在客户端流收到的示例回复: –

--bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe
Content-Disposition: form-data; name="numeric"
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
01010110
--bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe
Content-Disposition: form-data; name="stringmessage"
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding:8bit
testmessage
--bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe
Content-Disposition: form-data; name="binarydata"; filename="file1"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
HI,THIS IS MY BINARY DATA
--bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe
Content-Disposition: form-data; name="ending"
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
ending
--bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe--

解决方法

我终于得到了一个解决方法.

我将使用javax邮件MimeMultipart.

以下是解决方案的代码: –

ByteArrayDataSource datasource = new ByteArrayDataSource(in,"multipart/form-data");
    MimeMultipart multipart = new MimeMultipart(datasource);

    int count = multipart.getCount();
    log.debug("count " + count);
    for (int i = 0; i < count; i++) {
        BodyPart bodyPart = multipart.getBodyPart(i);
        if (bodyPart.isMimeType("text/plain")) {
            log.info("text/plain " + bodyPart.getContentType());
            processTextData(bodyPart.getContent());
        } else if (bodyPart.isMimeType("application/octet-stream")) {
            log.info("application/octet-stream " + bodyPart.getContentType());
            processBinaryData(bodyPart.getInputStream()));
        } else {
            log.warn("default " + bodyPart.getContentType());
        }
    }

如果其他人有任何标准解决方案,请告诉我.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读