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

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

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

服务器代码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); 

客户代码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()); } } 

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

来自Apache的Mime4j是一种解析客户端响应的方法。 使用这样的工具是一种常见的做法。

你可以参考这个链接 – http://www.programcreek.com/java-api-examples/index.php?api=org.apache.james.mime4j.MimeException

你可以从这个链接下载jar – http://james.apache.org/download.cgi#Apache_Mime4J

希望这可以帮助。 干杯