Prenos u više dijelova s ​​HttpClientom 4

1. Pregled

U ovom uputstvu ilustrirat ćemo kako to učiniti operacija prijenosa s više dijelova pomoću HttpClienta 4.

Koristit ćemo //echo.200please.com kao testni poslužitelj jer je javan i prihvaća većinu vrsta sadržaja.

Ako želite dublje kopati i naučite druge cool stvari koje možete raditi s HttpClientom - prijeđite na glavni tutorial za HttpClient.

2. Korištenje AddPart Metoda

Krenimo od gledanja MultipartEntityBuilder prigovoriti dodati dijelove Http entitetu koji će se zatim prenijeti putem POST operacije.

Ovo je generička metoda za dodavanje dijelova u HttpEntity predstavljajući oblik.

Primjer 2.1. - Učitavanje obrasca s dva dijela teksta i datotekom

Datoteka datoteke = nova datoteka (textFileName); HttpPost post = novi HttpPost ("// echo.200please.com"); FileBody fileBody = novi FileBody (datoteka, ContentType.DEFAULT_BINARY); StringBody stringBody1 = novi StringBody ("Poruka 1", ContentType.MULTIPART_FORM_DATA); StringBody stringBody2 = novi StringBody ("Poruka 2", ContentType.MULTIPART_FORM_DATA); // MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addPart ("upfile", fileBody); builder.addPart ("text1", stringBody1); builder.addPart ("text2", stringBody2); HttpEntity entitet = builder.build (); // post.setEntity (entitet); HttpResponse odgovor = client.execute (post);

Imajte na umu da instanciramo datoteku Datoteka objekt tako što ćete navesti ContentType vrijednost koju će poslužitelj koristiti.

Također imajte na umu da addPart metoda ima dva argumenta, ponašajući se poput ključ / vrijednost parovi za obrazac. Oni su relevantni samo ako strana poslužitelja stvarno očekuje i koristi imena parametara - u suprotnom, jednostavno se zanemaruju.

3. Korištenje addBinaryBody i addTextBody Metode

Izravniji način stvaranja višedijelnog entiteta je upotreba addBinaryBody i AddTextBody metode. Ove metode rade za prijenos teksta, datoteka, nizova znakova i InputStream predmeta. Ilustrirajmo to jednostavnim primjerima.

Primjer 3.1. - Učitavanje teksta i dijela tekstualne datoteke

HttpPost post = novi HttpPost ("// echo.200please.com"); Datoteka datoteke = nova datoteka (textFileName); String message = "Ovo je višedijelni post"; Graditelj MultipartEntityBuilder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody ("upfile", datoteka, ContentType.DEFAULT_BINARY, textFileName); builder.addTextBody ("tekst", poruka, ContentType.DEFAULT_BINARY); // HttpEntity entitet = builder.build (); post.setEntity (entitet); HttpResponse odgovor = client.execute (post);

Imajte na umu da FileBody i StringBody predmeti ovdje nisu potrebni.

Također je važno da većina poslužitelja ne provjerava ContentType teksta, tako da addTextBody metoda može izostaviti ContentType vrijednost.

The addBinaryBody API prihvaća a ContentType - ali to Također moguće je stvoriti entitet samo iz binarnog tijela i imena parametra obrasca koji sadrži datoteku. Kao što je navedeno u prethodnom odjeljku, neki poslužitelji neće prepoznati datoteku ako ContentType vrijednost nije navedena.

Dalje ćemo dodati zip datoteku kao InputStream, dok će slikovna datoteka biti dodana kao Datoteka objekt:

Primjer 3.2. - Prijenos aZip datoteka, slikovna datoteka i tekstualni dio

HttpPost post = novi HttpPost ("// echo.200please.com"); InputStream inputStream = novi FileInputStream (zipFileName); Datoteka datoteke = nova datoteka (imageFileName); String message = "Ovo je višedijelni post"; Graditelj MultipartEntityBuilder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody ("upfile", datoteka, ContentType.DEFAULT_BINARY, imageFileName); builder.addBinaryBody ("uzvodno", inputStream, ContentType.create ("application / zip"), zipFileName); builder.addTextBody ("tekst", poruka, ContentType.TEXT_PLAIN); // HttpEntity entitet = builder.build (); post.setEntity (entitet); HttpResponse odgovor = client.execute (post);

Imajte na umu da ContentType vrijednost se može stvoriti u hodu, kao što je slučaj u gornjem primjeru za zip datoteku.

Napokon, ne priznaju svi poslužitelji InputStream dijelovi. Poslužitelj kojeg smo napravili u prvom retku koda prepoznaje InputStreams.

Pogledajmo sada još jedan primjer gdje addBinaryBody radi izravno s bajtovskim nizom:

Primjer 3.3. - Učitavanje bajt polja i teksta

HttpPost post = novi HttpPost ("// echo.200please.com"); String message = "Ovo je višedijelni post"; byte [] bytes = "binarni kod" .getBytes (); // MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody ("upfile", bajtovi, ContentType.DEFAULT_BINARY, textFileName); builder.addTextBody ("tekst", poruka, ContentType.TEXT_PLAIN); // HttpEntity entitet = builder.build (); post.setEntity (entitet); HttpResponse odgovor = client.execute (post);

Primijetite ContentType - koji sada specificira binarne podatke.

4. Zaključak

Ovaj je članak predstavio MultipartEntityBuilder kao fleksibilni objekt koji nudi višestruki izbor API-ja za stvaranje višedijelnog obrasca.

Primjeri su također pokazali kako se koristi HttpClient učitati a HttpEntity koji je sličan obliku entiteta.

Implementacija svih ovih primjera i isječaka koda možete pronaći u našem GitHub projektu - ovo je projekt zasnovan na Eclipseu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.


$config[zx-auto] not found$config[zx-overlay] not found