Apache HttpClient - Çok Parçalı Yükleme

HttpClient kullanarak, Çok parçalı yükleme yapabiliriz, yani daha büyük nesneleri daha küçük parçalar halinde yükleyebiliriz. Bu bölümde, basit bir metin dosyası yükleyerek HTTP istemcisinde çok parçalı yüklemeyi gösteriyoruz.

Genel olarak, herhangi bir çok parçalı yükleme üç bölümden oluşur.

  • Yüklemenin başlatılması

  • Nesne parçalarının yüklenmesi

  • Çok parçalı yüklemeyi tamamlama

HttpClient kullanarak çok parçalı yükleme için aşağıdaki adımları izlememiz gerekir -

  • Çok parçalı bir oluşturucu oluşturun.

  • İstediğiniz parçaları ekleyin.

  • Derlemeyi tamamlayın ve çok parçalı bir HttpEntity edinin.

  • Yukarıdaki çok parçalı varlığı ayarlayarak istek oluşturun.

  • İsteği gerçekleştirin.

HttpClient kitaplığını kullanarak çok parçalı bir varlığı karşıya yükleme adımları aşağıda verilmiştir.

Adım 1 - HttpClient nesnesi oluşturun

createDefault() yöntemi HttpClients sınıf, sınıfın bir nesnesini döndürür CloseableHttpClient, HttpClient arabiriminin temel uygulamasıdır. Bu yöntemi kullanarak bir HttpClient nesnesi oluşturun -

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

Adım 2 - Bir FileBody nesnesi oluşturun

FileBodyclass, bir dosya tarafından desteklenen ikili gövde bölümünü temsil eder. Bu sınıfı birFile nesne ve bir ContentType içeriğin türünü temsil eden nesne.

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

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

Adım 3 - Bir MultipartEntityBuilder Oluşturun

MultipartEntityBuilder sınıf, çok parçalı oluşturmak için kullanılır HttpEntitynesne. Kullanarak nesnesini oluşturuncreate() yöntem (aynı sınıftan).

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

Adım 4 - Modu ayarlayın

Bir MultipartEntityBuilderüç moda sahiptir: STRICT, RFC6532 ve BROWSER_COMPATIBLE. Kullanarak istediğiniz moda ayarlayın.setMode() yöntem.

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

Adım 5 - İstenen çeşitli parçaları ekleyin

Yöntemleri kullanma addTextBody(), addPart () ve, addBinaryBody(), basit metinler, dosyalar, akışlar ve başka nesneler ekleyebilirsiniz. MultipartBuilder. Bu yöntemleri kullanarak istediğiniz içeriği ekleyin.

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

Adım 6 - Tek bir varlık oluşturmak

Tüm bu parçaları tek bir varlıkta inşa edebilirsiniz. build() yöntemi MultipartEntityBuildersınıf. Bu yöntemi kullanarak tüm parçaları tek birHttpEntity.

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

Adım 7 - Bir RequestBuilder nesnesi oluşturun

Sınıf RequestBuilderona parametreler ekleyerek istek oluşturmak için kullanılır. İstek PUT veya POST türündeyse, parametreleri isteğe URL kodlu varlık olarak ekler.

Kullanarak bir RequestBuilder nesnesi (POST türü) oluşturun. post()yöntem. Ve isteği bir parametre olarak göndermek istediğiniz Uri'yi iletin.

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

Adım 8 - Varlık nesnesini RequestBuilder olarak ayarlayın

Yukarıda oluşturulan çok parçalı varlığı, şunu kullanarak RequestBuilder'a ayarlayın. setEntity() yöntemi RequestBuilder sınıf.

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

Adım 9 - HttpUriRequest'i oluşturun

İnşa et HttpUriRequest kullanarak nesne iste build() yöntemi RequestBuilder sınıf.

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

Adım 10 - İsteği gerçekleştirin

Kullanmak execute() yöntem, önceki adımda oluşturulan isteği yürütün (isteği bu yönteme bir parametre olarak atlayarak).

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

Misal

Aşağıdaki örnek, HttpClient kitaplığı kullanılarak çok parçalı bir isteğin nasıl gönderileceğini gösterir. Bu örnekte, bir dosya ile desteklenen çok parçalı bir istek göndermeye çalışıyoruz.

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());
   }
}

Çıktı

Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir -

{
   "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