とカールポスト要求の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タイプと 失敗したパラメータ初期化に関するエラーメッセージを取得:アプリケーション/オクテットストリーム)を
イメージをBase64でエンコードする必要があると思います。 http://stackoverflow.com/questions/5416038/uploading-image-to-server-in-multipart-along-with-json-data-in-androidを見てください – GreyBeardedGeek
ありがとう、私はそれをチェックアウトします。しかし、それはなぜこのコードがこのcurlコマンドが何をするためにうまく動作するのか説明しません。 curl -F "file" = "@ example.png" "https://example.com" – kerouac