Preuzmite sliku ili datoteku s Spring MVC
1. Pregled
Posluživanje statičkih datoteka klijentu može se izvršiti na razne načine, a korištenje Spring Controllera nije nužno najbolja dostupna opcija.
Međutim, ponekad je ruta kontrolera neophodna - i na to ćemo biti usredotočeni u ovom kratkom članku.
2. Ovisnosti Mavena
Prvo, morat ćemo dodati ovisnost o našem pom.xml:
org.springframework.boot spring-boot-starter-web
To je sve, ovdje nam ništa drugo ne treba. Za informacije o verziji idite u Maven Central.
3. Korištenje @ResponseBody
Prvo izravno rješenje je korištenje @ResponseBody napomena na metodi kontrolera koja ukazuje da objekt vraćen metodom treba marširati izravno u tijelo HTTP odgovora:
@GetMapping ("/ get-text") public @ResponseBody String getText () {return "Hello world"; }
Stoga će ova metoda samo vratiti niz Pozdrav svijete umjesto da vrati pogled čije je ime Pozdrav svijete, poput tipičnije MVC aplikacije.
S @ResponseBody možemo vratiti gotovo bilo koju vrstu medija, sve dok imamo odgovarajući pretvarač HTTP poruka koji to može obraditi i razvrstati u izlazni tok.
4. Korištenje proizvodi za vraćanje slika
Vraćanje bajtovnih nizova omogućuje nam da vratimo gotovo sve - poput slika ili datoteka:
@GetMapping (value = "/ image") public @ResponseBody byte [] getImage () baca IOException {InputStream in = getClass () .getResourceAsStream ("/ com / baeldung / produceimage / image.jpg"); vrati IOUtils.toByteArray (u); }
Ovdje ne definiramo da je vraćeni niz bajtova slika. Stoga klijent to neće moći obraditi kao sliku - i više je vjerojatno da će preglednik jednostavno prikazati stvarne bajtove slike.
Da bismo definirali da vraćeni niz bajtova odgovara slici, možemo postaviti proizvodi atribut @GetMapping napomena za preciziranje MIME tipa vraćenog objekta:
@GetMapping (value = "/ get-image-with-media-type", stvara = MediaType.IMAGE_JPEG_VALUE) public @ResponseBody byte [] getImageWithMediaType () baca IOException {InputStream in = getClass () .getResourceAsStream (Compass). /produceimage/image.jpg "); vrati IOUtils.toByteArray (u); }
Ovdje proizvodi postavljeno je na Vrsta medija.IMAGE_JPEG_VALUE ukazuje na to da se s vraćenim objektom mora rukovati kao JPEG slikom.
A sada će preglednik prepoznati i pravilno prikazati tijelo odgovora kao sliku.
5. Korištenje proizvodi za vraćanje sirovih podataka
Parametar proizvodi može se postaviti na puno različitih vrijednosti (cjelokupni popis možete pronaći ovdje), ovisno o vrsti objekta koji želimo vratiti.
Stoga, ako želimo vratiti sirovu datoteku, možemo je jednostavno koristiti APPLICATION_OCTET_STREAM_VALUE:
@GetMapping (value = "/ get-file", proizvodi = MediaType.APPLICATION_OCTET_STREAM_VALUE) public @ResponseBody byte [] getFile () baca IOException {InputStream in = getClass () .getResourceAsStream ("/ produce / baeldt /. "); vrati IOUtils.toByteArray (u); }
6. Zaključak
U ovom kratkom članku imali smo pogled na jednostavan problem - vraćanje slika ili datoteka s Spring Controllera.
Kao i uvijek, primjer koda možete pronaći na Githubu.