1概要

このチュートリアルでは、HttpClient 4を使ったマルチパートアップロード操作の方法を説明します。

テストサーバーとして


http://echo.200please.com


を使用します。これは一般に公開されており、ほとんどの種類のコンテンツを受け入れられるためです。


  • HttpClient

    ** リンクを使ってできる他の素晴らしいことを学びましょう。


2

AddPart

メソッドを使用する

まず、

MultipartEntityBuilder

オブジェクトを調べて、Httpエンティティにパーツを追加し、それをPOST操作でアップロードします。

これは、フォームを表す

HttpEntity

にパーツを追加するための一般的な方法です。

実施例2.1。 –

2つのテキスト部分と1つのファイルを含むフォームをアップロードする

File file = new File(textFileName);
HttpPost post = new HttpPost("http://echo.200please.com");
FileBody fileBody = new FileBody(file, ContentType.DEFAULT__BINARY);
StringBody stringBody1 = new StringBody("Message 1", ContentType.MULTIPART__FORM__DATA);
StringBody stringBody2 = new StringBody("Message 2", ContentType.MULTIPART__FORM__DATA);//
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER__COMPATIBLE);
builder.addPart("upfile", fileBody);
builder.addPart("text1", stringBody1);
builder.addPart("text2", stringBody2);
HttpEntity entity = builder.build();//post.setEntity(entity);
HttpResponse response = client.execute(post);

サーバーが使用する

ContentType

値も指定して、

File

オブジェクトをインスタンス化していることに注意してください。

また、

addPart

メソッドには2つの引数があり、フォームの

key/value

のペアのように機能します。これらは、サーバー側が実際にパラメータ名を想定して使用している場合にのみ関連します。


3

addBinaryBody

および

addTextBody

メソッドを使用する

マルチパートエンティティを作成するより直接的な方法は、

addBinaryBody

メソッドと

AddTextBody

メソッドを使用することです。これらのメソッドは、テキスト、ファイル、文字配列、および

InputStream

オブジェクトをアップロードするために機能します。

簡単な例でその方法を説明しましょう。

実施例3.1。 –

テキストとテキストファイルパートのアップロード

HttpPost post = new HttpPost("http://echo.200please.com");
File file = new File(textFileName);
String message = "This is a multipart post";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER__COMPATIBLE);
builder.addBinaryBody("upfile", file, ContentType.DEFAULT__BINARY, textFileName);
builder.addTextBody("text", message, ContentType.DEFAULT__BINARY);//
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);


FileBody

および

StringBody

オブジェクトはここでは必要ないことに注意してください。

また重要なことに、ほとんどのサーバーはテキスト本文の

ContentType

をチェックしないので、

addTextBody

メソッドは

ContentType

値を省略することができます。


addBinaryBody

APIは

ContentType

を受け入れますが、バイナリ本体とファイルを保持するフォームパラメータの名前からエンティティを作成することもできます。前のセクションで述べたように、

ContentType

値が指定されていない場合、一部のサーバーはファイルを認識しません。

次に、zipファイルを

InputStream

として追加し、イメージファイルは

File

オブジェクトとして追加します。

実施例3.2。 –


__

Zipファイル、画像ファイル、およびテキストパートのアップロード

HttpPost post = new HttpPost("http://echo.200please.com");
InputStream inputStream = new FileInputStream(zipFileName);
File file = new File(imageFileName);
String message = "This is a multipart post";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER__COMPATIBLE);
builder.addBinaryBody
  ("upfile", file, ContentType.DEFAULT__BINARY, imageFileName);
builder.addBinaryBody
  ("upstream", inputStream, ContentType.create("application/zip"), zipFileName);
builder.addTextBody("text", message, ContentType.TEXT__PLAIN);//
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);

上記のzipファイルの例の場合のように、

ContentType

値はその場で作成できます。

最後に、すべてのサーバーが

InputStream

部分を認識するわけではありません。コードの最初の行でインスタンス化したサーバーは

__InputStream

__sを認識します。

ここで、

addBinaryBody

がバイト配列を直接処理している別の例を見てみましょう。

実施例3.3。 –

バイト配列とテキストのアップロード

HttpPost post = new HttpPost("http://echo.200please.com");
String message = "This is a multipart post";
byte[]bytes = "binary code".getBytes(); //
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER__COMPATIBLE);
builder.addBinaryBody("upfile", bytes, ContentType.DEFAULT__BINARY, textFileName);
builder.addTextBody("text", message, ContentType.TEXT__PLAIN);//
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);


ContentType

– バイナリデータを指定している – に注目してください。


4結論

この記事では、マルチパートフォームを作成するための複数のAPI選択を提供する柔軟なオブジェクトとして

MultipartEntityBuilder

を提示しました。

例では、フォームエンティティに似た

HttpEntity

をアップロードするための

HttpClient

の使用方法も示しています。

これらすべての例とコードスニペットの実装は、https://github.com/eugenp/tutorials/tree/master/httpclient#readme

にあります。

これはEclipseベースのプロジェクトです。そのままインポートして実行するのは簡単です。