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