Stiahnite si obrázok alebo súbor pomocou Spring MVC
1. Prehľad
Poskytovanie statických súborov klientovi je možné vykonať rôznymi spôsobmi a použitie pružinového ovládača nemusí byť nevyhnutne najlepšou dostupnou voľbou.
Niekedy je však cesta ovládača nevyhnutná - a na to sa v tomto rýchlom článku zameriame.
2. Maven závislosti
Najskôr budeme musieť do našej závislosti pridať závislosť pom.xml:
org.springframework.boot spring-boot-starter-web
To je všetko, nič viac tu nepotrebujeme. Informácie o verzii nájdete v Maven Central.
3. Používanie @ResponseBody
Prvým priamym riešením je použiť @ResponseBody anotácia k metóde radiča, ktorá označuje, že objekt vrátený metódou by mal byť zaradený priamo do tela odpovede HTTP:
@GetMapping ("/ get-text") public @ResponseBody String getText () {návrat "Hello world"; }
Táto metóda teda iba vráti reťazec Ahoj svet namiesto vrátenia zobrazenia, ktorého meno je Ahoj svet, ako typickejšia aplikácia MVC.
S @ResponseBody môžeme vrátiť skoro akýkoľvek typ média, pokiaľ máme zodpovedajúci prevádzač správ HTTP, ktorý to dokáže spracovať a zaradiť do výstupného toku.
4. Používanie vyrába pre vracanie obrázkov
Vrátenie bajtových polí nám umožňuje vrátiť takmer všetko - napríklad obrázky alebo súbory:
@GetMapping (value = "/ image") public @ResponseBody byte [] getImage () hodí IOException {InputStream v = getClass () .getResourceAsStream ("/ com / baeldung / produceimage / image.jpg"); vrátiť IOUtils.toByteArray (v); }
Tu nedefinujeme, že vrátené bajtové pole je obrázok. Klient preto nebude môcť s týmto obrázkom narábať - a je pravdepodobnejšie, že prehliadač jednoducho zobrazí skutočné bajty obrázka.
Aby sme definovali, že vrátené bajtové pole zodpovedá obrázku, môžeme nastaviť vyrába atribút @GetMapping anotácia na spresnenie typu MIME vráteného objektu:
@GetMapping (value = "/ get-image-with-media-type", produce = MediaType.IMAGE_JPEG_VALUE) public @ResponseBody byte [] getImageWithMediaType () hodí IOException {InputStream in = getClass () .getResourceAsStream ("/ com / baeldung" /produceimage/image.jpg "); vrátiť IOUtils.toByteArray (v); }
Tu vyrába je nastavený na MediaType.IMAGE_JPEG_VALUE na označenie, že s vráteným objektom sa musí narábať ako s obrázkom JPEG.
Teraz prehliadač rozpozná a správne zobrazí telo odpovede ako obrázok.
5. Používanie vyrába pre vrátenie nespracovaných údajov
Parameter vyrába možno nastaviť na veľa rôznych hodnôt (kompletný zoznam nájdete tu) v závislosti od typu objektu, ktorý chceme vrátiť.
Preto, ak chceme vrátiť nespracovaný súbor, môžeme jednoducho použiť APPLICATION_OCTET_STREAM_VALUE:
@GetMapping (value = "/ get-file", produce = MediaType.APPLICATION_OCTET_STREAM_VALUE) verejný @ResponseBody byte [] getFile () vyvolá IOException {InputStream in = getClass () .getResourceAsStream ("/ com / baeldung / produceimage / data.t "); vrátiť IOUtils.toByteArray (v); }
6. Záver
V tomto rýchlom článku sme sa pozreli na jednoduchý problém - vrátenie obrázkov alebo súborov z Spring Controller.
A ako vždy, ukážkový kód nájdete na Githube.