Töltsön le egy képet vagy egy fájlt a Spring MVC segítségével

1. Áttekintés

A statikus fájlok kiszolgálása az ügyfél számára többféle módon történhet, és a Spring Controller használata nem feltétlenül a legjobb elérhető lehetőség.

Néha azonban szükséges a vezérlő útvonala - és erre fogunk koncentrálni ebben a gyors cikkben.

2. Maven-függőségek

Először hozzá kell adnunk egy függőséget a sajátunkhoz pom.xml:

 org.springframework.boot spring-boot-starter-web 

Ez minden, itt nincs szükségünk másra. A verzióval kapcsolatos információkért látogasson el a Maven Central oldalára.

3. Használata @ResponseBody

Az első egyszerű megoldás a @ResponseBody jelölés egy vezérlő metóduson annak jelzésére, hogy a metódussal visszaadott objektumot közvetlenül a HTTP válasz testhez kell rendezni:

@GetMapping ("/ get-text") public @ResponseBody String getText () {return "Hello world"; } 

Így ez a módszer csak visszaadja a karakterláncot Helló Világ ahelyett, hogy egy nézetet adna vissza, amelynek neve Helló Világ, mint egy tipikusabb MVC alkalmazás.

Val vel @ResponseBody jóformán bármilyen médiatípust visszaadhatunk, amennyiben rendelkezünk megfelelő HTTP üzenet-átalakítóval, amely képes ezt kezelni és átirányítani a kimeneti adatfolyamba.

4. Használata termel képek visszaküldéséhez

A bájt tömbök visszaadása lehetővé teszi, hogy szinte bármit - például képeket vagy fájlokat - visszaadjunk:

@GetMapping (value = "/ image") public @ResponseBody byte [] getImage () dobja az IOException-t {InputStream in = getClass () .getResourceAsStream ("/ com / baeldung / producimage / image.jpg"); return IOUtils.toByteArray (in); } 

Itt nem definiáljuk, hogy a visszaadott bájt tömb kép. Ezért az ügyfél nem fogja tudni ezt képként kezelni - és valószínűleg a böngésző egyszerűen megjeleníti a kép tényleges bájtjait.

Beállíthatjuk, hogy a visszatérített bájt tömb megfelel-e egy képnek termel attribútuma @GetMapping kommentár a visszaküldött objektum MIME típusának pontosításához:

A @GetMapping (value = "/ get-image-with-media-type", = MediaType.IMAGE_JPEG_VALUE) public @ResponseBody byte [] getImageWithMediaType () dobja az IOException {InputStream in = getClass () .getResourceAsStream ("/ / /produceimage/image.jpg "); return IOUtils.toByteArray (in); } 

Itt termel értékre van állítva MediaType.IMAGE_JPEG_VALUE jelzi, hogy a visszaküldött objektumot JPEG képként kell kezelni.

Most pedig a böngésző felismeri és megfelelően megjeleníti a választestet képként.

5. Használata termel a nyers adatok visszaküldéséhez

A paraméter termel sok különböző értékre állítható (a teljes lista itt található), a visszaadni kívánt objektum típusától függően.

Ezért, ha nyers fájlt akarunk visszaadni, egyszerűen használhatjuk APPLICATION_OCTET_STREAM_VALUE:

A @GetMapping (érték = "/ get-file", = MediaType.APPLICATION_OCTET_STREAM_VALUE) nyilvános @ResponseBody byte [] getFile () dobja az IOException {InputStream-et = getClass () .getResourceAsStream ("/ com / baeldung.xtxtage "); return IOUtils.toByteArray (in); } 

6. Következtetés

Ebben a gyors cikkben egy egyszerű problémát pillantottunk meg - képek vagy fájlok visszaküldése a Spring Controllerről.

És mint mindig, a példakód megtalálható a Githubon.


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