Используя HttpClient, мы можем выполнять многокомпонентную загрузку, то есть мы можем загружать большие объекты небольшими частями. В этой главе мы продемонстрируем многоэтапную загрузку в HTTP-клиенте, загрузив простой текстовый файл.
В общем, любая многочастная загрузка состоит из трех частей.
-
Начало загрузки
-
Загрузка частей объекта
-
Завершение многочастной загрузки
Начало загрузки
Загрузка частей объекта
Завершение многочастной загрузки
Для многоэтапной загрузки с использованием HttpClient нам необходимо выполнить следующие шаги:
-
Создать многокомпонентный конструктор.
-
Добавьте нужные части к нему.
-
Завершите сборку и получите составную часть HttpEntity.
-
Создайте запрос, установив вышеуказанный объект muti-part.
-
Выполнить запрос.
Создать многокомпонентный конструктор.
Добавьте нужные части к нему.
Завершите сборку и получите составную часть HttpEntity.
Создайте запрос, установив вышеуказанный объект muti-part.
Выполнить запрос.
Ниже приведены шаги для загрузки составного объекта с использованием библиотеки HttpClient.
Шаг 1 — Создайте объект HttpClient
Метод createDefault () класса HttpClients возвращает объект класса CloseableHttpClient , который является базовой реализацией интерфейса HttpClient. Используя этот метод, создайте объект HttpClient —
//Creating CloseableHttpClient object CloseableHttpClient httpclient = HttpClients.createDefault();
Шаг 2 — Создать объект FileBody
Класс FileBody представляет двоичную часть тела, поддерживаемую файлом. Создайте экземпляр этого класса, передав объект File и объект ContentType, представляющий тип содержимого.
//Creating a File object File file = new File("sample.txt"); //Creating the FileBody object FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);
Шаг 3 — Создайте MultipartEntityBuilder
Класс MultipartEntityBuilder используется для создания объекта HttpEntity, состоящего из нескольких частей . Создайте его объект, используя метод create () (того же класса).
//Creating the MultipartEntityBuilder MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
Шаг 4 — Установите режим
MultipartEntityBuilder имеет три режима: STRICT, RFC6532 и BROWSER_COMPATIBLE. Установите желаемый режим, используя метод setMode () .
//Setting the mode entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
Шаг 5 — Добавьте различные нужные части
Используя методы addTextBody () , addPart () и addBinaryBody () , вы можете добавить простой текст, файлы, потоки и другие объекты в MultipartBuilder . Добавьте желаемое содержимое с помощью этих методов.
//Adding text entitybuilder.addTextBody("sample_text", "This is the text part of our file"); //Adding a file entitybuilder.addBinaryBody("image", new File("logo.png"));
Шаг 6 — Создание единого объекта
Вы можете собрать все эти части в одну сущность, используя метод build () класса MultipartEntityBuilder . Используя этот метод, соберите все части в один HttpEntity .
//Building a single entity using the parts HttpEntity mutiPartHttpEntity = entityBuilder.build();
Шаг 7 — Создание объекта RequestBuilder
Класс RequestBuilder используется для построения запроса путем добавления к нему параметров. Если запрос имеет тип PUT или POST, он добавляет параметры в запрос как объект в кодировке URL.
Создайте объект RequestBuilder (типа POST), используя метод post () . И передайте Uri, которому вы хотите отправить запрос, в качестве параметра.
//Building the post request object RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");
Шаг 8 — Установите объект объекта в RequestBuilder
Установите созданный выше составной объект в RequestBuilder, используя метод setEntity () класса RequestBuilder .
//Setting the entity object to the RequestBuilder reqbuilder.setEntity(mutiPartHttpEntity);
Шаг 9 — Создайте запрос HttpUriRequest
Создайте объект запроса HttpUriRequest, используя метод build () класса RequestBuilder .
//Building the request HttpUriRequest multipartRequest = reqbuilder.build();
Шаг 10 — Выполнить запрос
Используя метод execute () , выполните запрос, созданный на предыдущем шаге (обойдя запрос в качестве параметра для этого метода).
//Executing the request HttpResponse httpresponse = httpclient.execute(multipartRequest);
пример
В следующем примере показано, как отправить многокомпонентный запрос с использованием библиотеки HttpClient. В этом примере мы пытаемся отправить многокомпонентный запрос, подкрепленный файлом.
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()); } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод —