Többrészes feltöltés a HttpClient 4 segítségével

1. Áttekintés

Ebben az oktatóanyagban bemutatjuk, hogyan kell csinálni többrészes feltöltési művelet a HttpClient 4 segítségével.

Majd használjuk //echo.200please.com tesztkiszolgálóként, mert nyilvános és a legtöbb típusú tartalmat elfogadja.

Ha mélyebbre akarsz ásni és megtanulhat további jó dolgokat, amelyeket a HttpClient segítségével tehet - menjen át a fő HttpClient oktatóanyagra.

2. A AddPart Módszer

Kezdjük azzal, hogy megnézzük a MultipartEntityBuilder tiltakozni adjon hozzá alkatrészeket egy Http entitáshoz amelyet aztán egy POST művelet útján feltöltenek.

Ez egy általános módszer alkatrészek hozzáadásához az HttpEntity a formát képviselve.

2.1. Példa - Két űrlapot tartalmazó fájl és fájl feltöltése

Fájlfájl = új Fájl (textFileName); HttpPost post = new HttpPost ("// echo.200please.com"); FileBody fileBody = új FileBody (fájl, ContentType.DEFAULT_BINARY); StringBody stringBody1 = új StringBody ("1. üzenet", ContentType.MULTIPART_FORM_DATA); StringBody stringBody2 = új StringBody ("2. üzenet", 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 entitás = builder.build (); // post.setEntity (entitás); HttpResponse response = client.execute (post);

Ne feledje, hogy a File objektumot a Tartalom típus a szerver által használt érték.

Ezenkívül vegye figyelembe, hogy a addPart A módszernek két érve van, hasonlóan viselkedve kulcs érték párok az űrlaphoz. Ezek csak akkor relevánsak, ha a szerveroldal valóban paraméterek nevét várja és használja - ellenkező esetben egyszerűen figyelmen kívül hagyja őket.

3. A addBinaryBody és addTextBody Mód

A többrészes entitás létrehozásának közvetlenebb módja a addBinaryBody és AddTextBody mód. Ezek a módszerek a szöveg, fájlok, karaktertömbök és InputStream tárgyakat. Illusztráljuk, hogyan, egyszerű példákkal.

3.1. Példa - Szöveg és egy szövegfájl rész feltöltése

HttpPost post = new HttpPost ("// echo.200please.com"); Fájlfájl = új Fájl (textFileName); String message = "Ez egy többrészes bejegyzés"; MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody ("upfile", fájl, ContentType.DEFAULT_BINARY, textFileName); builder.addTextBody ("szöveg", üzenet, ContentType.DEFAULT_BINARY); // HttpEntity entitás = builder.build (); post.setEntity (entitás); HttpResponse response = client.execute (post);

Vegye figyelembe, hogy a FileBody és StringBody tárgyak itt nem szükségesek.

Szintén fontos, hogy a legtöbb szerver nem ellenőrzi a Tartalom típus a szövegtörzs, tehát a addTextBody módszer elhagyhatja a Tartalom típus érték.

A addBinaryBody Az API elfogadja a Tartalom típus - de is csak egy bináris törzsből és az űrlapparaméter nevéből lehet létrehozni az entitást. Az előző szakaszban leírtak szerint néhány szerver nem ismeri fel a fájlt, ha a Tartalom típus értéke nincs megadva.

Ezután hozzáadunk egy zip fájlt InputStream, míg a képfájlt hozzáadjuk File tárgy:

3.2. Példa - Feltöltés aZip fájl, képfájl és szöveges rész

HttpPost post = new HttpPost ("// echo.200please.com"); InputStream inputStream = új FileInputStream (zipFileName); File file = új File (imageFileName); String message = "Ez egy többrészes bejegyzés"; MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody ("upfile", fájl, ContentType.DEFAULT_BINARY, imageFileName); builder.addBinaryBody ("upstream", inputStream, ContentType.create ("application / zip"), zipFileName); builder.addTextBody ("szöveg", üzenet, ContentType.TEXT_PLAIN); // HttpEntity entitás = builder.build (); post.setEntity (entitás); HttpResponse response = client.execute (post);

Vegye figyelembe, hogy a Tartalom típus értéket menet közben lehet létrehozni, ahogy ez a zip fájl fenti példáján is történik.

Végül nem minden szerver nyugtázza InputStream alkatrészek. Az általunk a kód első sorában példányosított szerver felismeri InputStreams.

Most nézzünk meg egy másik példát, ahol addBinaryBody közvetlenül dolgozik egy bájt tömböt:

3.3. Példa - Bájtömb és szöveg feltöltése

HttpPost post = new HttpPost ("// echo.200please.com"); String message = "Ez egy többrészes bejegyzés"; byte [] bytes = "bináris kód" .getBytes (); // MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody ("upfile", bájtok, ContentType.DEFAULT_BINARY, textFileName); builder.addTextBody ("szöveg", üzenet, ContentType.TEXT_PLAIN); // HttpEntity entitás = builder.build (); post.setEntity (entitás); HttpResponse response = client.execute (post);

Figyelje meg a Tartalom típus - amely most bináris adatokat határoz meg.

4. Következtetés

Ez a cikk bemutatta a MultipartEntityBuilder rugalmas objektumként, amely több API választási lehetőséget kínál a többrészes űrlap létrehozásához.

A példák bemutatták a HttpClient feltölteni a HttpEntity hogy hasonló egy formanyomtatványhoz.

Mindezen példák és kódrészletek megvalósítása megtalálható a GitHub projektünkben - ez egy Eclipse-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.