2016-07-30 5 views
0

とカールポスト要求のJavaの同等:私は、このコマンドはまったく同じものを行うためのJavaコードを記述しようとしている画像やテキスト

curl -F "[email protected]" -F "param1=some-value" -F "param2=some_value" http://example.com 

私は現在、このような何かしようとしている:

HttpClient httpClient = HttpClientBuilder.create().build(); 
HttpPost poster = new HttpPost("http://example.com"); 
MultipartEntityBuilder mpEntityBuilder = MultipartEntityBuilder.create(); 
mpEntityBuilder.addPart("param1", new StringBody("some-value")); 
mpEntityBuilder.addPart("param2", new StringBody("some-value")); 
mpEntity.addPart("image", getImage("some-image")); 
poster.setEntity(mpEntityBuilder .build()); 
HttpResponse response = httpClient.execute(poster); 

ここでgetImage(String)はByteArrayBodyを返します。 (実際には、カールコマンドのようにディスクから読み取るのではなく、その場でウェブから画像をダウンロードしていますが、これで違いはないと思います)

私はこのリンクをチェックアウトしましたが、 Java Equivalent of curl query

奇妙なことは、ほとんど同じコードを使用して、必要なときにうまく動作する別のAPIへのHTTP投稿を作成していることですテキストパラメータなしで単独で画像を送信する。 (文字列体なし)

しかし、画像(ByteArrayBodyとして)とテキスト(StringBodyとして)の両方を送信しようとすると、次のようなメッセージが表示されます。 'できませんでしたmimeType:application/octet-stream 'でパラメータオブジェクトを初期化します。これはおそらくカスタムエラーメッセージなので、私は実際にこれに関する多くの情報を見つけることができません。

StringBody()には他のいくつかのconstuctorを使用しようとしましたが、これは推奨されていませんでしたが、役に立たなかったためです。使用する正しいコンストラクタは何かわかりませんが、問題が発生するかどうかはわかりません。

編集: Android: upload file with filling out POST body together 私はMIMEタイプと 失敗したパラメータ初期化に関するエラーメッセージを取得:アプリケーション/オクテットストリーム)を

+0

イメージをBase64でエンコードする必要があると思います。 http://stackoverflow.com/questions/5416038/uploading-image-to-server-in-multipart-along-with-json-data-in-androidを見てください – GreyBeardedGeek

+0

ありがとう、私はそれをチェックアウトします。しかし、それはなぜこのコードがこのcurlコマンドが何をするためにうまく動作するのか説明しません。 curl -F "file" = "@ example.png" "https://example.com" – kerouac

答えて

1
誰かの前に非常によく似た質問をしますが、解決策は、私のために動作しませんように思えます

私はそれが文書化されていないが、curl -F @は明らかに役立つようにしようとしているは、.jpgのためにimage/jpegを含むいくつかの拡張子/接尾辞のためにContent-typeを記入する。 HttpClientはMIMEを「既定値ではありません」というメッセージにデフォルト設定します。application/octet-streamはおそらくエラーの原因となります。 は通常コンテンツ型

new ByteArrayBody (data, ContentType.create("image/jpeg"), null) 

またはあなたが(ブラウザとは違って)curl -F @もありませんが、Webサーバ、ファイル名の属性を指定したい場合はを設定しますが、気にしないこと3、引数ctorのを使用します第3引数のnullの代わりにStringを入力します。

+0

あなたは天才です!私はどこでも検索した後にあきらめた。 – kerouac

関連する問題