在客户端接收多部分响应(ClosableHttpResponse) [英] Receiving Multipart Response on client side (ClosableHttpResponse)

查看:954
本文介绍了在客户端接收多部分响应(ClosableHttpResponse)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个java控制器,它必须向我发送一些文本数据和不同的字节数组。所以我正在构建n多部分请求并将其写入来自HttpServletResponse的流。

I have a java controller which have to send me some text data and different byte arrays. So I am building n multipart request and writing it to stream from HttpServletResponse.

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

Now my problem is how to parse the response at client side and extract the multiple parts.

服务器代码SNIPPET: -

SERVER CODE SNIPPET:-

        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);

客户代码链接: -

CLIENT CODE 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,但没有一个提供解析多部分请求的方法。

I checked CloseableHttpResponse and HttpEntity but none of them is providing method to parse multipart request.

编辑1:
这是我在客户端流收到的样本回复: -

EDIT 1: This is my sample response I am receiving at client side stream:-

--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--


推荐答案

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

I have finally got a workaround for it.

我将使用javax邮件MimeMultipart。

I will be using javax mail MimeMultipart.

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

Below is a code snipped for the solution:-

    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());
        }
    }

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

Please let me know if anybody else have any standard solution.

这篇关于在客户端接收多部分响应(ClosableHttpResponse)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆