Učitavanje MultipartFile s Spring RestTemplate
1. Pregled
Ovaj se brzi vodič usredotočuje na to kako prenijeti datoteku s više dijelova pomoću Spring's RestTemplate.
Vidjet ćemo oboje jedna datoteka i više datoteka - uploadpomoću RestTemplate.
2. Što je HTTP zahtjev za više dijelova?
Jednostavno rečeno, osnovno tijelo zahtjeva HTTP POST sadrži podatke obrasca u parovima ime / vrijednost.
S druge strane, HTTP klijenti mogu konstruirati HTTP višedijelne zahtjeve za slanje tekstualnih ili binarnih datoteka na poslužitelj; uglavnom se koristi za prijenos datoteka.
Još jedan uobičajeni slučaj upotrebe je slanje e-pošte s privitkom. Zahtjevi za višedijelne datoteke raščlanjuju veliku datoteku na manje dijelove i pomoću graničnih oznaka označavaju početak i kraj bloka.
Ovdje saznajte više o višedijelnim zahtjevima.
3. Ovisnost Mavena
Ova pojedinačna ovisnost dovoljna je za klijentsku aplikaciju:
org.springframework spring-web 5.2.2.OSLOBOĐENJE
4. The Poslužitelj za prijenos datoteka
API poslužitelja datoteka izlaže dvije REST krajnje točke za prijenos pojedinačnih, odnosno više datoteka:
- POST / fileserver / singlefileupload /
- POST / fileserver / multiplefileupload /
5. Učitavanje jedne datoteke
Prvo, da vidimo prijenos jedne datoteke pomoću RestTemplate.
Moramo stvarati HttpEntityzaglavljem i tijelom. Postavi tip sadržaja vrijednost zaglavlja do MediaType.MULTIPART_FORM_DATA. Kada je postavljeno ovo zaglavlje, RestTemplate automatski razvrstava podatke datoteke zajedno s nekim metapodacima.
Metapodaci uključuju naziv datoteke, veličinu datoteke i vrstu sadržaja datoteke (na primjer tekst / običan):
HttpHeaders zaglavlja = novi HttpHeaders (); headers.setContentType (MediaType.MULTIPART_FORM_DATA);
Dalje, izgradite tijelo zahtjeva kao primjerak LinkedMultiValueMap razred. LinkedMultiValueMap oblozi LinkedHashMap spremanje više vrijednosti za svaki ključ u a LinkedList.
U našem primjeru, getTestFile () metoda generira lažnu datoteku u letu i vraća datoteku FileSystemResource:
MultiValueMap body = novo LinkedMultiValueMap (); body.add ("datoteka", getTestFile ());
Konačno, konstruirajte HttpEntity instanca koja omotava zaglavlje i objekt tijela i objavljuje ga pomoću a RestTemplate.
Imajte na umu da prijenos jedne datoteke upućuje na / fileserver / singlefileupload / krajnja točka.
Na kraju, poziv restTemplate.postForEntity () dovršava posao povezivanja na zadani URL i slanja datoteke na poslužitelj:
HttpEntity requestEntity = novi HttpEntity (tijelo, zaglavlja); Niz poslužiteljaUrl = "// localhost: 8082 / spring-rest / fileserver / singlefileupload /"; RestTemplate restTemplate = novi RestTemplate (); ResponseEntity odgovor = restTemplate .postForEntity (serverUrl, requestEntity, String.class);
6. Učitavanje više datoteka
U višestrukom prijenosu datoteka, jedina promjena u prijenosu jedne datoteke je u konstruiranju tijela zahtjeva.
Stvorimo više datoteka i dodajte ih istim ključem u MultiValueMap.
Očito bi se URL zahtjeva trebao odnositi na krajnju točku za prijenos više datoteka:
MultiValueMap body = novo LinkedMultiValueMap (); body.add ("datoteke", getTestFile ()); body.add ("datoteke", getTestFile ()); body.add ("datoteke", getTestFile ()); HttpEntity requestEntity = novi HttpEntity (tijelo, zaglavlja); Niz poslužiteljaUrl = "// localhost: 8082 / spring-rest / fileserver / multiplefileupload /"; RestTemplate restTemplate = novi RestTemplate (); ResponseEntity odgovor = restTemplate .postForEntity (serverUrl, requestEntity, String.class);
To je uvijek moguće modelirati prijenos jedne datoteke pomoću višestrukog prijenosa datoteka.
7. Zaključak
U zaključku smo vidjeli slučaj MultipartFile prijenos pomoću Springa RestTemplate.
Kao i uvijek, primjer izvornog koda klijenta i poslužitelja dostupan je na GitHub-u.