2010-12-28 3 views
2

私のJavaコードから複数のフォームデータを送信しようとしています。誰かが次のようにContent Lengthを設定する方法を教えてもらえますか? ContentDescriptorインターフェイスを実装するInputStreamBodyを使用すると、ヘッダーが含まれているようです。 InputStreamBodyでgetContentLengthを実行すると、コンテンツを追加した後に私に-1が与えられます。 contentLengthにはバイト配列の長さを与えるためにサブクラス化しましたが、ContentDescriptorに必要な他のヘッダーが適切なPOSTに設定されているかどうかはわかりません。ContentStreamのHttpMime 4.0.3設定のInputStreamBody

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost(myURL); 
ContentBody cb = new InputStreamBody(new ByteArrayInputStream(bytearray), myMimeType, filename); 
//ContentBody cb = new ByteArrayBody(bytearray, myMimeType, filename); 

MultipartEntity mpentity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
mpentity.addPart("key", new StringBody("SOME_KEY")); 
mpentity.addPart("output", new StringBody("SOME_NAME")); 
mpentity.addPart("content", cb); 
httpPost.setEntity(mpentity); 
HttpResponse response = httpclient.execute(httpPost); 

HttpEntity resEntity = response.getEntity(); 

答えて

3

私はあなたがコメントアウトしたByteArrayBodyクラスの著者です。

私は同じ問題に直面しているので、私はそれを書きました。 https://issues.apache.org/jira/browse/HTTPCLIENT-1014

したがって、すでにバイト[]があるので、HttpMimeをこのクラスを含む最新バージョンの4.1-beta1にアップグレードしてください。または、Jiraの問題のコードを自分のプロジェクトにコピーします。

ByteArrayBodyクラスは、必要なものだけを実行します。

+0

こんにちは、ありがとうございました。クラスを使用しているときに次のエラーが発生しています... httpmimeとhttpclientの両方が4.1-beta1でなければなりませんか?それは私があなたの提案の後に持っている現在の設定です... java.lang.AbstractMethodError at org.apache.http.entity.mime.HttpMultipart.doWriteTo(HttpMultipart.java:169) at org.apache.http.entity.mime.HttpMultipart.writeTo(HttpMultipart.java:191) at org.apache.http.entity.mime.MultipartEntity.writeTo(MultipartEntity.java:180) \t at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:97) Ram

+0

こんにちは、私はどのようにマルチパートメッセージのためのContent-Encodingを設定するのですか?私はエンコーディングを問い合わせるときにnullになっています。どんな助けもありがとうございます。 – Ram

+0

はい、両方とも4.1-beta1である必要があります –

関連する問題