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