Nahrávanie súborov pomocou Spring MVC

1. Prehľad

V predchádzajúcich článkoch sme predstavili základy manipulácie s formulármi a preskúmali sme knižnicu značiek formulárov v Spring MVC.

V tomto článku sa zameriavame na to, čo ponúka jar podpora viacerých častí (nahrávanie súborov) vo webových aplikáciách.

Jar nám umožňuje povoliť túto viacdielnu podporu s možnosťou zapojenia MultipartResolver predmety. Rámec poskytuje jednu MultipartResolver implementácia pre použitie s Commons FileUpload a ďalší na použitie s Servlet 3.0 analýza viacerých častí.

Po nakonfigurovaní MultipartResolver uvidíme, ako nahrať jeden súbor a viac súborov.

Dotkneme sa tiež Jarná topánka.

2. Commons FileUpload

Použit CommonsMultipartResolver na spracovanie nahrávania súborov musíme pridať nasledujúcu závislosť:

 commons-fileupload commons-fileupload 1.3.1 

Teraz môžeme definovať CommonsMultipartResolver fazuľa do našej jarnej konfigurácie.

Toto MultipartResolver prichádza s radom nastaviť metóda definovania vlastností, ako je maximálna veľkosť nahrávaných súborov:

@Bean (name = "multipartResolver") public CommonsMultipartResolver multipartResolver () {CommonsMultipartResolver multipartResolver = nový CommonsMultipartResolver (); multipartResolver.setMaxUploadSize (100000); návrat multipartResolver; }

Tu musíme ovládať rôzne vlastnosti CommonsMultipartResolver v samotnej Beanovej definícii.

3. S Servlet 3.0

Aby bolo možné použiť Servlet 3.0 syntaktická analýza viacerých častí, musíme nakonfigurovať niekoľko častí aplikácie. Najskôr musíme nastaviť a MultipartConfigElement v našom DispatcherServletregistrácia:

verejná trieda MainWebAppInitializer implementuje WebApplicationInitializer {súkromný reťazec TMP_FOLDER = "/ tmp"; private int MAX_UPLOAD_SIZE = 5 * 1024 * 1024; @Override public void onStartup (ServletContext sc) hodí ServletException {ServletRegistration.Dynamic appServlet = sc.addServlet ("mvc", nový DispatcherServlet (nový GenericWebApplicationContext ())); appServlet.setLoadOnStartup (1); MultipartConfigElement multipartConfigElement = nový MultipartConfigElement (TMP_FOLDER, MAX_UPLOAD_SIZE, MAX_UPLOAD_SIZE * 2, MAX_UPLOAD_SIZE / 2); appServlet.setMultipartConfig (multipartConfigElement); }}

V MultipartConfigElement objektu, nakonfigurovali sme umiestnenie úložiska, maximálnu veľkosť individuálneho súboru, maximálnu veľkosť požiadavky (v prípade viacerých súborov v jednej požiadavke) a veľkosť, v ktorej je priebeh nahrávania súborov vyprázdnený do úložného miesta.

Tieto nastavenia musia byť použité na úrovni registrácie servletu, ako Servlet 3.0 neumožňuje ich registráciu v MultipartResolver ako je to v prípade CommonsMultipartResolver.

Akonáhle je to hotové, môžeme pridať StandardServletMultipartResolver do našej jarnej konfigurácie:

@Bean public StandardServletMultipartResolver multipartResolver () {vrátiť nový StandardServletMultipartResolver (); }

4. Odovzdanie súboru

Na nahranie nášho súboru môžeme vytvoriť jednoduchú formu, v ktorej používame HTML vstup označiť pomocou type = 'súbor'.

Bez ohľadu na konfiguráciu spracovania nahrávania, ktorú sme vybrali, je potrebné nastaviť atribút kódovania formulára na multipart / form-data. Toto umožní prehliadaču vedieť, ako kódovať formulár:

Vyberte súbor, ktorý chcete nahrať

Na uloženie nahraného súboru môžeme použiť a MultipartFile premenná. Túto premennú môžeme načítať z parametra požiadavky vo vnútri metódy nášho kontrolóra:

@RequestMapping (value = "/ uploadFile", method = RequestMethod.POST) public String submit (@RequestParam ("file") súbor MultipartFile, ModelMap modelMap) {modelMap.addAttribute ("súbor", súbor); vrátiť "fileUploadView"; } 

The MultipartFile trieda poskytuje prístup k podrobnostiam o nahranom súbore, vrátane názvu súboru, typu súboru atď. Na zobrazenie týchto informácií môžeme použiť jednoduchú stránku HTML:

Odoslaný súbor

OriginalFileName:$ {file.originalFilename}
Typ:$ {file.contentType}

5. Nahrávanie Viac súborov

Ak chcete nahrať viac súborov v jednej žiadosti, jednoducho vo formulári vložíte viac polí vstupných súborov:

Vyberte súbor, ktorý chcete nahrať
Vyberte súbor, ktorý chcete nahrať
Vyberte súbor, ktorý chcete nahrať

Musíme sa postarať o to, aby každé vstupné pole malo rovnaký názov, aby k nemu bolo možné získať prístup ako k súboru MultipartFile:

@RequestMapping (value = "/ uploadMultiFile", method = RequestMethod.POST) public String submit (@RequestParam ("files") MultipartFile [] súbory, ModelMap modelMap) {modelMap.addAttribute ("súbory", súbory); vrátiť "fileUploadView"; } 

Teraz môžeme toto pole jednoducho iterovať, aby sme zobrazili informácie o súboroch:

   Jarné nahrávanie súborov MVC 

Odoslané súbory

OriginalFileName:$ {file.originalFilename}
Typ:$ {file.contentType}

6. Načítanie súborov s ďalšími údajmi formulára

Spolu s nahrávaným súborom môžeme na server odoslať aj ďalšie informácie. Musíme len zahrnúť povinné polia do formulára:

názov
Email
Vyberte súbor, ktorý chcete nahrať

V radiči môžeme všetky údaje formulára získať pomocou @RequestParam anotácia:

@PostMapping ("/ uploadFileWithAddtionalData") verejný reťazec odoslať (súbor @RequestParam MultipartFile, názov reťazca @RequestParam, e-mail reťazca @RequestParam, ModelMap modelMap) {modelMap.addAttribute ("name", meno); modelMap.addAttribute ("e-mail", e-mail); modelMap.addAttribute ("súbor", súbor); vrátiť "fileUploadView"; }

Podobne ako v predchádzajúcich častiach, môžeme stránku HTML použiť s JSTL značky na zobrazenie informácií.

Môžeme tiež zapuzdriť všetky polia formulára v triede modelu a použiť ich @ModelAttribute anotácia v radiči. To by bolo užitočné, keď je k súboru veľa ďalších polí. Pozrime sa na kód:

public class FormDataWithFile {private String name; súkromný reťazcový e-mail; súkromný súbor MultipartFile; // štandardné getre a setre}
@PostMapping ("/ uploadFileModelAttribute") public String submit (@ModelAttribute FormDataWithFile formDataWithFile, ModelMap modelMap) {modelMap.addAttribute ("formDataWithFile", formDataWithFile); vrátiť "fileUploadView"; }

7. Spring Boot File Upload

Pokiaľ používame Spring Boot, stále platí všetko, čo sme doteraz videli.

Spring Boot však ešte viac uľahčuje konfiguráciu a začatie všetkého s malými problémami.

Najmä nie je potrebné konfigurovať žiadny servlet, pretože Boot nás zaregistruje a nakonfiguruje za predpokladu, že do svojich závislostí zahrnieme aj webový modul:

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

Nájdeme najnovšiu verziu servera spring-boot-starter-web na Maven Central.

Ak chceme ovládať maximálnu veľkosť nahrávaného súboru, môžeme upraviť našu application.properties:

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

Môžeme tiež ovládať, či je povolené nahrávanie súborov, a umiestnenie nahrávania súborov:

spring.servlet.multipart.enabled = skutočná spring.servlet.multipart.location = $ {java.io.tmpdir}

Všimnite si, že sme to použili $ {java.io.tmpdir} definovať umiestnenie nahrávania, aby sme mohli použiť dočasné umiestnenie pre rôzne operačné systémy.

8. Záver

V tomto článku sme sa zaoberali rôznymi spôsobmi konfigurácie podpory viacerých častí na jar. Pomocou nich môžeme podporovať nahrávanie súborov v našich webových aplikáciách.

Implementáciu tohto tutoriálu nájdete v projekte GitHub. Keď projekt beží lokálne, k príkladu formulára sa dá dostať na // localhost: 8080 / spring-mvc-java / fileUpload


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