Fájl feltöltése a Spring MVC segítségével

1. Áttekintés

Korábbi cikkekben bemutattuk az űrlapkezelés alapjait, és feltártuk az űrlapcímtár-könyvtárat a Spring MVC-ben.

Ebben a cikkben arra összpontosítunk, hogy mit kínál a Tavasz többrészes (fájlfeltöltés) támogatás webes alkalmazásokban.

A tavasz lehetővé teszi számunkra, hogy ezt a többrészes támogatást dugaszolhatóval engedélyezzük MultipartResolver tárgyakat. A keret biztosít egyet MultipartResolver megvalósítás a Commons FileUpload és egy másik a használatra Servlet 3.0 többrészes kérelem elemzése.

A. Konfigurálása után MultipartResolver meglátjuk, hogyan tölthet fel egyetlen fájlt és több fájlt.

Érinteni is fogunk Tavaszi csizma.

2. Commons FileUpload

Használni CommonsMultipartResolver a fájlfeltöltés kezeléséhez hozzá kell adnunk a következő függőséget:

 commons-fileupload commons-fileupload 1.3.1 

Most meghatározhatjuk a CommonsMultipartResolver bab a tavaszi konfigurációnkba.

Ez MultipartResolver sorozatával érkezik készlet módszer a tulajdonságok meghatározására, például a feltöltések maximális mérete:

@Bean (név = "multipartResolver") public CommonsMultipartResolver multipartResolver () {CommonsMultipartResolver multipartResolver = új CommonsMultipartResolver (); multipartResolver.setMaxUploadSize (100000); return multipartResolver; }

Itt ellenőriznünk kell a CommonsMultipartResolver magában a Babdefinícióban.

3. Azzal Servlet 3.0

Használata érdekében Servlet 3.0 többrészes elemzéshez konfigurálnunk kell pár alkalmazást. Először meg kell adnunk a MultipartConfigElement miénkben DispatcherServletbejegyzés:

public class MainWebAppInitializer megvalósítja a WebApplicationInitializer {private String TMP_FOLDER = "/ tmp"; privát int MAX_UPLOAD_SIZE = 5 * 1024 * 1024; A @Orride public void onStartup (ServletContext sc) dobja a ServletException {ServletRegistration.Dynamic appServlet = sc.addServlet ("mvc", új DispatcherServlet (új GenericWebApplicationContext ())); appServlet.setLoadOnStartup (1); MultipartConfigElement multipartConfigElement = új MultipartConfigElement (TMP_FOLDER, MAX_UPLOAD_SIZE, MAX_UPLOAD_SIZE * 2, MAX_UPLOAD_SIZE / 2); appServlet.setMultipartConfig (multipartConfigElement); }}

Ban,-ben MultipartConfigElement objektum, konfiguráltuk a tárolási helyet, a maximális egyedi fájlméretet, a maximális kérelem méretét (ha egy kérelemben több fájl is van), és azt a méretet, amelynél a fájl feltöltésének folyamata a tárhelyre kerül.

Ezeket a beállításokat a szervlet regisztráció szintjén kell alkalmazni, as Servlet 3.0 nem teszi lehetővé, hogy bejegyezzék őket a MultipartResolver ahogy az történik CommonsMultipartResolver.

Miután ez megtörtént, hozzáadhatjuk a StandardServletMultipartResolver tavaszi konfigurációnkhoz:

@Bean public StandardServletMultipartResolver multipartResolver () {return new StandardServletMultipartResolver (); }

4. Fájl feltöltése

A fájlunk feltöltéséhez létrehozhatunk egy egyszerű űrlapot, amelyben HTML-t használunk bemenet címkézni type = 'fájl'.

Függetlenül a feltöltés kezelésének konfigurációjától, amelyet választottunk, az űrlap kódolási attribútumát be kell állítanunk többrészes / űrlap-adat. Ez lehetővé teszi a böngésző számára, hogyan kell kódolni az űrlapot:

Válasszon ki egy feltöltendő fájlt

A feltöltött fájl tárolásához használhatjuk a MultipartFile változó. Ezt a változót lekérhetjük a vezérlő metódusunkon belüli kérési paraméterből:

@RequestMapping (érték = "/ uploadFile", módszer = RequestMethod.POST) nyilvános karakterlánc beküldése (@RequestParam ("fájl") MultipartFile fájl, ModelMap modellMap) {modelMap.addAttribute ("fájl", fájl); return "fileUploadView"; } 

A MultipartFile osztály hozzáférést biztosít a feltöltött fájl részleteihez, beleértve a fájl nevét, a fájltípust és így tovább. Egy egyszerű HTML oldalt használhatunk az információk megjelenítésére:

Beküldött fájl

OriginalFileName:$ {file.originalFilename}
Típus:$ {file.contentType}

5. Feltöltés Több fájl

Több fájl feltöltése egyetlen kérelemben egyszerűen több bemeneti fájlmezőt teszünk az űrlapba:

Válasszon ki egy feltöltendő fájlt
Válasszon ki egy feltöltendő fájlt
Válasszon ki egy feltöltendő fájlt

Vigyáznunk kell arra, hogy minden beviteli mezőnek ugyanaz a neve legyen, hogy tömbként hozzáférhető legyen MultipartFile:

@RequestMapping (value = "/ uploadMultiFile", method = RequestMethod.POST) public String submit (@RequestParam ("files") MultipartFile [] files, ModelMap modelMap) {modelMap.addAttribute ("files", files); return "fileUploadView"; } 

Most egyszerűen iterálhatunk a tömbön a fájlinformációk megjelenítéséhez:

   Tavaszi MVC fájl feltöltés 

Beküldött fájlok

OriginalFileName:$ {file.originalFilename}
Típus:$ {file.contentType}

6. Fájlok feltöltése további űrlapadatokkal

További információkat is küldhetünk a szerverre a feltöltött fájlokkal együtt. Csak meg kell adnunk a kötelező mezőket az űrlapban:

Név
Email
Válasszon ki egy feltöltendő fájlt

A vezérlőben az összes űrlapadatot a @RequestParam kommentár:

@PostMapping ("/ uploadFileWithAddtionalData") public String submit (@RequestParam MultipartFile file, @RequestParam String name, @RequestParam String email, ModelMap modelMap) {modelMap.addAttribute ("name", name); modelMap.addAttribute ("e-mail", e-mail); modelMap.addAttribute ("fájl", fájl); return "fileUploadView"; }

Az előző szakaszokhoz hasonlóan a HTML oldalt is használhatjuk JSTL címkék az információk megjelenítéséhez.

Az összes űrlapmezőt beilleszthetjük egy modellosztályba és felhasználásba is @ModelAttribute annotáció a vezérlőben. Ez hasznos lehet, ha a fájl mellett sok további mező van. Nézzük meg a kódot:

public class FormDataWithFile {private String name; privát karakterlánc e-mail; privát MultipartFile fájl; // szabványos mérőeszközök és beállítók}
@PostMapping ("/ uploadFileModelAttribute") public String submit (@ModelAttribute FormDataWithFile formDataWithFile, ModelMap modelMap) {modelMap.addAttribute ("formDataWithFile", formDataWithFile); return "fileUploadView"; }

7. Tavaszi indító fájl feltöltése

Ha a Spring Boot-ot használjuk, akkor minden érvényes, amit eddig láttunk.

A Spring Boot azonban még könnyebben konfigurálja és mindent kezd, kis gond nélkül.

Különösen, nem szükséges egyetlen szervletet sem konfigurálni, mivel a Boot regisztrálja és konfigurálja nekünk, feltéve, hogy a webmodult beépítjük a függőségeinkbe:

 org.springframework.boot spring-boot-starter-web 2.1.8.FELHASZNÁLÁS 

Megtalálhatjuk a legújabb verzióját tavasz-boot-starter-web a Maven Central-on.

Ha ellenőrizni akarjuk a fájl maximális feltöltési méretét, akkor szerkeszthetjük a fájlt alkalmazás.tulajdonságok:

spring.servlet.multipart.max-file-size = 128KB spring.servlet.multipart.max-request-size = 128 KB

Azt is ellenőrizhetjük, hogy a fájl feltöltése engedélyezve van-e, és a fájl feltöltésének helye:

spring.servlet.multipart.enabled = true spring.servlet.multipart.location = $ {java.io.tmpdir}

Ne feledje, hogy használtuk $ {java.io.tmpdir} a feltöltés helyének meghatározásához, hogy az ideiglenes helyet különböző operációs rendszerek számára használhassuk.

8. Következtetés

Ebben a cikkben a többrészes támogatás tavasszal történő konfigurálásának különböző módjait vizsgáltuk. Ezek használatával támogathatjuk a fájlfeltöltéseket webalkalmazásainkban.

A bemutató megvalósítása megtalálható egy GitHub projektben. Amikor a projekt helyi szinten fut, az űrlappélda a // localhost címen érhető el: 8080 / spring-mvc-java / fileUpload