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