Как загрузить несколько файлов в определенное место с помощью Spring MVC? Полное руководство с кодом Java
Опубликовано: 2013-06-22 Это еще одно полное руководство по Spring MVC, которое принимает файл в форме загрузки и копирует его в определенную папку в событии «Отправить». Как обычно, у нас есть dependency
от примера Hello World Spring MVC.
Итак, вот какие добавления/изменения нам нужно выполнить в этом примере:
- Новый файл: CrunchifyFileUploadController.java
- Новый файл: CrunchifyFileUpload.java
- Новый файл: uploadfile.jsp
- Новый файл: uploadfilesuccess.jsp
- Измененный файл: crunchify-servlet.xml
- 2 новых файла jar:
commons-io-2.4.jar
иcommons-fileupload-1.3.jar
У вас есть вопросы? Тогда вы находитесь в правильном месте.
- Пример загрузки нескольких файлов Java
- Загрузить несколько файлов или папок
Вот окончательная структура проекта, чтобы вы поняли, куда добавлять файлы.
Теперь приступим:
Шаг 1) Предварительное условие:
https://crunchify.com/hello-world-example-spring-mvc-3-2-1/ (успешно разверните этот проект на Tomcat)
Зависимости Maven:
Добавьте ниже новые зависимости в файл pom.xml
вашего проекта.
1 2 3 4 5 6 7 8 9 10 |
< dependency > < groupId > commons - fileupload < / groupId > < artifactId > commons - fileupload < / artifactId > < version > 1.2 < / version > < / dependency > < dependency > < groupId > commons - io < / groupId > < artifactId > commons - io < / artifactId > < version > 1.4 < / version > < / dependency > |
Шаг 2) SpringController
Создайте контроллер на основе Spring 3 MVC, который обрабатывает загрузку файлов. В этом контроллере есть два метода:
-
crunchifyDisplayForm
— просто перенаправляет запрос на pageuploadfile.jsp -
crunchifySave
— извлекает форму с помощью аннотации@ModelAttribute
и получает из нее содержимое файла. Он создает список имен загружаемых файлов и передает этот список на страницу успеха.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
package com . crunchify . controller ; import com . crunchify . form . CrunchifyFileUpload ; import java . io . File ; import java . io . IOException ; import java . util . ArrayList ; import java . util . List ; import org . springframework . stereotype . Controller ; import org . springframework . ui . Model ; import org . springframework . web . bind . annotation . ModelAttribute ; import org . springframework . web . bind . annotation . RequestMapping ; import org . springframework . web . bind . annotation . RequestMethod ; import org . springframework . web . multipart . MultipartFile ; @Controller public class CrunchifyFileUploadController { @RequestMapping ( value = "/upload" , method = RequestMethod . GET ) public String crunchifyDisplayForm ( ) { return "uploadfile" ; } @RequestMapping ( value = "/savefiles" , method = RequestMethod . POST ) public String crunchifySave ( @ModelAttribute ( "uploadForm" ) CrunchifyFileUpload uploadForm , Model map ) throws IllegalStateException , IOException { String saveDirectory = "c:/crunchify/" ; List <MultipartFile> crunchifyFiles = uploadForm . getFiles ( ) ; List <String> fileNames = new ArrayList <String> ( ) ; if ( null ! = crunchifyFiles && crunchifyFiles.size() > 0) { for (MultipartFile multipartFile : crunchifyFiles) { String fileName = multipartFile.getOriginalFilename(); if ( ! "" . equalsIgnoreCase ( fileName ) ) { // Handle file content - multipartFile.getInputStream() multipartFile . transferTo ( new File ( saveDirectory + fileName ) ) ; fileNames . add ( fileName ) ; } } } map . addAttribute ( "files" , fileNames ) ; return "uploadfilesuccess" ; } } |
Шаг 3) Модель — объект формы
Создайте Java-бин, который действует как объект модели/формы для нашего приложения Spring. Этот компонент содержит List
объектов org.springframework.web.multipart.MultipartFile
. Платформа Spring предоставляет полезный класс MultipartFile, который можно использовать для извлечения содержимого загруженного файла. Помимо своего содержимого, объект MultipartFile также предоставляет вам другую полезную информацию, такую как имя файла, размер файла и т. д.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com . crunchify . form ; import java . util . List ; import org . springframework . web . multipart . MultipartFile ; public class CrunchifyFileUpload { private List <MultipartFile> crunchifyFiles ; public List <MultipartFile> getFiles ( ) { return crunchifyFiles ; } public void setFiles ( List <MultipartFile> files ) { this . crunchifyFiles = files ; } } |
Шаг 4) Представления JSP
Теперь создайте страницы просмотра для этого приложения. Нам понадобятся две JSP, одна для отображения формы загрузки файла, а другая для отображения результата успешной загрузки.
В uploadfile.jsp
отображается форма с файловым вводом. Кроме того, мы добавили небольшой фрагмент jquery по нажатию кнопки «Добавить». Это добавит новый компонент ввода файла в конце формы. Это позволяет пользователю загружать столько файлов, сколько он хочет.
Обратите внимание, что мы установили enctype=”multipart/form-data”
нашего <form>
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<% @ taglib uri = "http://www.springframework.org/tags/form" prefix = "form" %> < html > < head > < title > Crunchify - Spring MVC Upload Multiple Files Example < / title > <script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" > </script> <script> $ ( document ) . ready ( function ( ) { //add more file components if Add is clicked $ ( '#addFile' ) . click ( function ( ) { var fileIndex = $ ( '#fileTable tr' ) . children ( ) . length - 1 ; $ ( '#fileTable' ) . append ( '<tr><td>' + ' <input type="file" name="files[' + fileIndex + ']" />' + '</td></tr>' ) ; } ) ; } ) ; </script> <style type ="text/css"> body { background-image : url ( 'https://cdn.crunchify.com/wp-content/uploads/2013/03/Crunchify.bg_.300.png' ) ; } </style> < / head > < body > < br > < br > < div align = "center" > < h1 > Crunchify - Spring MVC Upload Multiple Files Example < / h1 > < form : form method = "post" action = "savefiles.html" modelAttribute = "uploadForm" enctype = "multipart/form-data" > < p > Select files to upload . Press Add button to add more file inputs . < / p > < table id = "fileTable" > < tr > < td > < input name = "files[0]" type = "file" / > < / td > < / tr > < tr > < td > < input name = "files[1]" type = "file" / > < / td > < / tr > < / table > < br / > < input type = "submit" value = "Upload" / > < input id = "addFile" type = "button" value = "Add File" / > < / form : form > < br / > < / div > < / body > < / html > |

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<% @ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %> < html > < head > < title > Crunchify - Upload Multiple Files Example < / title > <style type ="text/css"> body { background-image : url ( 'https://cdn.crunchify.com/wp-content/uploads/2013/03/Crunchify.bg_.300.png' ) ; } </style> < / head > < body > < br > < br > < div align = "center" > < h1 > Crunchify - Spring MVC Upload Multiple Files Example < / h1 > < p > Awesome . . Following files are uploaded successfully . < / p > < ol > < c : forEach items = "${files}" var = "file" > - $ { file } < br > < / c : forEach > < / ol > < a href = "http://localhost:8080/CrunchifySpringMVC3.2.1/upload.html" > < input type = "button" value = "Go Back" / > < / a > < br / > < br / > < br / > < div style = "font-family: verdana; line-height: 25px; padding: 5px 10px; border-radius: 10px; border: 1px dotted #A4A4A4; width: 50%; font-size: 12px;" > Spring MVC Upload Multiple Files Example by < a href = 'https://crunchify.com' > Crunchify < / a > . Click < a href = 'https://crunchify.com/category/java-tutorials/' > here < / a > for all Java , Spring MVC , Web Development examples . < br > < / div > < / div > < / body > < / html > |
Шаг 5) Обновить конфигурацию Spring
Добавьте ниже bean-компонент в файл crunchify-servlet.xml
, чуть выше строки <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
.
1 2 |
< bean id = "multipartResolver" class = "org.springframework.web.multipart.commons.CommonsMultipartResolver" / > |
Шаг 6) Результат проверки
Запустите Tomcat и укажите в браузере этот URL-адрес: http://localhost:8080/CrunchifySpringMVC3.2.1/upload.html, и вы должны увидеть экран, похожий на этот.
После загрузки файла вы увидите сообщение об успешном завершении, подобное этому. Вы всегда можете украсить свой файл .jsp так, как вам хочется.
Список всех примеров Spring MVC, примеров Java.