Como fazer upload de vários arquivos para um local específico usando o Spring MVC? Tutorial completo com código Java
Publicados: 2013-06-22 Este é outro tutorial completo do Spring MVC que aceita arquivo no formulário Upload e o copia para uma pasta específica no evento “Submit”. Como de costume, temos uma dependency
do Hello World Spring MVC Example.
Então, estas são as adições/alterações que precisamos realizar neste exemplo:
- Novo arquivo: CrunchifyFileUploadController.java
- Novo arquivo: CrunchifyFileUpload.java
- Novo arquivo: uploadfile.jsp
- Novo arquivo: uploadfilesuccess.jsp
- Arquivo modificado: crunchify-servlet.xml
- 2 novos arquivos jar:
commons-io-2.4.jar
ecommons-fileupload-1.3.jar
Tem alguma pergunta abaixo? Então você está no lugar certo.
- Exemplo de upload de vários arquivos Java
- Carregar vários arquivos ou pastas
Aqui está uma estrutura final do projeto para que você tenha uma ideia de onde adicionar arquivos.
Agora vamos começar:
Passo-1) Pré-requisito:
https://crunchify.com/hello-world-example-spring-mvc-3-2-1/ (Implante este projeto com sucesso no Tomcat)
Dependências do Maven:
Adicione abaixo novas dependências ao arquivo pom.xml
do seu projeto.
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 > |
Etapa 2) SpringController
Crie um controlador baseado em Spring 3 MVC que lida com o upload de arquivos. Existem dois métodos neste controlador:
-
crunchifyDisplayForm
– Ele simplesmente encaminha a solicitação para o pageuploadfile.jsp -
crunchifySave
– Busca o formulário usando a anotação@ModelAttribute
e obtém o conteúdo do arquivo dele. Ele cria uma lista de nomes de arquivos de arquivos sendo carregados e passa essa lista para a página de sucesso.
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" ; } } |
Etapa 3) Modelo - Objeto de formulário
Crie um bean Java que atue como objeto Model/Form para nosso aplicativo Spring. Este bean contém uma List
de objetos org.springframework.web.multipart.MultipartFile
. O framework Spring fornece uma classe útil MultipartFile que pode ser usada para buscar o conteúdo do arquivo carregado. Além de seu conteúdo, o objeto MultipartFile também fornece outras informações úteis, como nome do arquivo, tamanho do arquivo etc.
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 ; } } |
Etapa-4) Visualizações JSP
Agora crie as páginas de visualização para este aplicativo. Precisaremos de dois JSPs, um para exibir o formulário de upload do arquivo e outro para mostrar o resultado do upload bem-sucedido.
O uploadfile.jsp
exibe um formulário com entrada de arquivo. Além disso, adicionamos um pequeno trecho de jquery ao clicar no botão Adicionar. Isso adicionará um novo componente de entrada de arquivo no final do formulário. Isso permite que o usuário carregue quantos arquivos quiser.
Observe que definimos o enctype=”multipart/form-data”
de nossa tag <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 > |
Etapa 5) Atualizar a configuração do Spring
Adicione o bean abaixo ao arquivo crunchify-servlet.xml
, logo acima da linha <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
.
1 2 |
< bean id = "multipartResolver" class = "org.springframework.web.multipart.commons.CommonsMultipartResolver" / > |
Etapa-6) Resultado do Checkout
Inicie o tomcat e aponte seu navegador para esta URL: http://localhost:8080/CrunchifySpringMVC3.2.1/upload.html e você deverá ver uma tela semelhante a esta.
Após o upload do arquivo, você verá uma mensagem de sucesso como esta. Você sempre pode embelezar seu arquivo .jsp da maneira que desejar.
Lista de todos os exemplos de Spring MVC, exemplos de Java.