Apache HttpClient - Unggahan Multipart

Dengan menggunakan HttpClient, kita dapat melakukan unggahan Multipart, yaitu kita dapat mengunggah objek yang lebih besar di bagian yang lebih kecil. Dalam bab ini, kami mendemonstrasikan unggahan multi bagian di klien HTTP dengan mengunggah file teks sederhana.

Secara umum, unggahan multibagian apa pun berisi tiga bagian.

  • Inisiasi pengunggahan

  • Mengupload bagian objek

  • Menyelesaikan unggahan Multipart

Untuk unggahan multi bagian menggunakan HttpClient, kita perlu mengikuti langkah-langkah di bawah ini -

  • Buat pembuat multi bagian.

  • Tambahkan bagian yang diinginkan ke dalamnya.

  • Selesaikan build dan dapatkan HttpEntity multi bagian.

  • Buat permintaan dengan mengatur entitas muti-part di atas.

  • Jalankan permintaan tersebut.

Berikut adalah langkah-langkah untuk mengunggah entitas multi bagian menggunakan pustaka HttpClient.

Langkah 1 - Buat objek HttpClient

Itu createDefault() metode dari HttpClients kelas mengembalikan objek kelas CloseableHttpClient, yang merupakan implementasi dasar dari antarmuka HttpClient. Menggunakan metode ini, buat objek HttpClient -

//Creating CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();

Langkah 2 - Buat objek FileBody

FileBodyclass mewakili bagian tubuh biner yang didukung oleh sebuah file. Instantiate kelas ini dengan meneruskan aFile objek dan a ContentType objek yang mewakili jenis konten.

//Creating a File object
File file = new File("sample.txt");

//Creating the FileBody object
FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);

Langkah 3 - Buat MultipartEntityBuilder

Itu MultipartEntityBuilder kelas digunakan untuk membangun multi-bagian HttpEntityobyek. Buat objeknya menggunakancreate() metode (dari kelas yang sama).

//Creating the MultipartEntityBuilder
MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();

Langkah 4 - Atur mode

SEBUAH MultipartEntityBuildermemiliki tiga mode: STRICT, RFC6532, dan BROWSER_COMPATIBLE. Setel ke mode yang diinginkan menggunakansetMode() metode.

//Setting the mode
entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

Langkah 5 - Tambahkan berbagai bagian yang diinginkan

Menggunakan metode addTextBody(), addPart () dan, addBinaryBody(), Anda dapat menambahkan teks sederhana, file, aliran, dan objek lain ke file MultipartBuilder. Tambahkan konten yang diinginkan menggunakan metode ini.

//Adding text
entitybuilder.addTextBody("sample_text", "This is the text part of our file");
//Adding a file
entitybuilder.addBinaryBody("image", new File("logo.png"));

Langkah 6 - Membangun entitas tunggal

Anda dapat membangun semua bagian ini menjadi satu entitas menggunakan build() metode dari MultipartEntityBuilderkelas. Dengan menggunakan metode ini, buat semua bagian menjadi satuHttpEntity.

//Building a single entity using the parts
HttpEntity mutiPartHttpEntity = entityBuilder.build();

Langkah 7 - Buat objek RequestBuilder

Kelas RequestBuilderdigunakan untuk membangun permintaan dengan menambahkan parameter padanya. Jika permintaan berjenis PUT atau POST, ia menambahkan parameter ke permintaan sebagai entitas yang dikodekan URL.

Buat objek RequestBuilder (berjenis POST) menggunakan post()metode. Dan kirimkan Uri yang ingin Anda kirimi permintaan sebagai parameter.

//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");

Langkah 8 - Setel objek entitas ke RequestBuilder

Setel entitas multi bagian yang dibuat di atas ke RequestBuilder menggunakan setEntity() metode dari RequestBuilder kelas.

//Setting the entity object to the RequestBuilder
reqbuilder.setEntity(mutiPartHttpEntity);

Langkah 9 - Bangun HttpUriRequest

Membangun sebuah HttpUriRequest meminta objek menggunakan build() metode dari RequestBuilder kelas.

//Building the request
HttpUriRequest multipartRequest = reqbuilder.build();

Langkah 10 - Jalankan permintaan

Menggunakan execute() metode, jalankan permintaan yang dibangun pada langkah sebelumnya (melewati permintaan sebagai parameter untuk metode ini).

//Executing the request
HttpResponse httpresponse = httpclient.execute(multipartRequest);

Contoh

Contoh berikut menunjukkan cara mengirim permintaan multi bagian menggunakan perpustakaan HttpClient. Dalam contoh ini, kami mencoba mengirim permintaan multi bagian yang didukung oleh sebuah file.

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

public class MultipartUploadExample {
 
   public static void main(String args[]) throws Exception{

      //Creating CloseableHttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();
 
      //Creating a file object
      File file = new File("sample.txt");

      //Creating the FileBody object
      FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);

      //Creating the MultipartEntityBuilder
      MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();

      //Setting the mode
      entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

      //Adding text
      entitybuilder.addTextBody("sample_text", "This is the text part of our file");

      //Adding a file
      entitybuilder.addBinaryBody("image", new File("logo.png"));

      //Building a single entity using the parts
      HttpEntity mutiPartHttpEntity = entitybuilder.build();

      //Building the RequestBuilder request object
      RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");

      //Set the entity object to the RequestBuilder
      reqbuilder.setEntity(mutiPartHttpEntity);

      //Building the request
      HttpUriRequest multipartRequest = reqbuilder.build();

      //Executing the request
      HttpResponse httpresponse = httpclient.execute(multipartRequest);

      //Printing the status and the contents of the response
      System.out.println(EntityUtils.toString(httpresponse.getEntity()));
      System.out.println(httpresponse.getStatusLine());
   }
}

Keluaran

Saat menjalankan, program di atas menghasilkan output berikut -

{
   "args": {},
   "data": "",
   "files": {
      "image": "data:application/octets66PohrH3IWNk1FzpohfdXPIfv9X3490FGcuXsHn9X0piCwomF/xdgADZ9GsfSyvLYAAAAAE
      lFTkSuQmCC"
   },
   "form": {
      "sample_text": "This is the text part of our file"
   },
   "headers": {
      "Accept-Encoding": "gzip,deflate",
      "Connection": "close",
      "Content-Length": "11104", 
      "Content-Type": "multipart/form-data;
      boundary=UFJbPHT7mTwpVq70LpZgCi5I2nvxd1g-I8Rt",
      "Host": "httpbin.org",
      "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)"
   },
   "json": null,
   "origin": "117.216.245.180",
   "url": "http://httpbin.org/post"
}
HTTP/1.1 200 OK