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.


$config[zx-auto] not found$config[zx-overlay] not found