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.