2017-03-01 6 views
1

私には、テキストデータと異なるバイト配列を送ってくるJavaコントローラがあります。だから、私はn multipart要求を構築し、HttpServletResponseからストリームに書き込んでいます。クライアント側(ClosableHttpResponse)のマルチパートレスポンスを受信

私の問題は、クライアント側で応答を解析し、複数の部分を抽出する方法です。

サーバーコードスニペット: -

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

クライアントコードスニペット: -

 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をチェックするが、それらのどれもマルチパートリクエストを解析する方法を提供することはありません。

EDIT 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-- 
+0

私はこれがあなたを助けることができると信じています:http://stackoverflow.com/questions/3337056/convenient-way-to-parse-incoming-multipart-form-data-parameters-in-a-servlet – Boschi

+0

@Boschi Fileupload APIメソッドはHTTPServletRequestを受け入れます。これは私の場合はサーブレットからの応答では不可能です。私はここにいくつかのポイントを逃している場合は教えてください。 –

+0

クライアントで受け取ったサンプルメッセージの応答を追加しました。 –

答えて

3

私は最終的に回避策を得ました。

私は、javax mail 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()); 
     } 
    } 

誰が任意の標準ソリューションを持っているなら、私に知らせてください。

0

Mime4jは、クライアント側からの応答を解析する一つの方法です。このようなツールを使用するのが一般的な方法です。

あなたは、このリンクを参照することができます - あなたは、このリンクからjarファイルをダウンロードすることができhttp://www.programcreek.com/java-api-examples/index.php?api=org.apache.james.mime4j.MimeException

を - http://james.apache.org/download.cgi#Apache_Mime4J

は、この情報がお役に立てば幸いです。乾杯。

+0

私は試しましたが、ストリームを解析できませんでした。おそらくそれは異なる方法で期待しているからでしょう。クライアントで受け取ったサンプルメッセージの応答を追加しました。 –

関連する問題