Java – receive a closeablehttpresponse on the client

I have a Java controller that must send me some text data and different byte arrays So I'm building n multipart requests and writing them to the stream from httpservletresponse

Now my question is how to parse the response and extract multiple parts on the client

Server code chain: –

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

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

I checked closeablehttpresponse and httpentity, but neither of them provided a way to parse multipart requests

Edit 1: This is the sample reply I received in the client stream: –

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

Solution

I finally got a solution

I will use javax mail mimemultipart

Here is the solution code: –

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

If others have any standard solutions, please let me know

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>