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.