This is another complete Spring MVC tutorial which accepts file on Upload form and copy it to specificfolder on “Submit” event. As usual we have a dependency
on Hello World Spring MVC Example.
So, these are the additions / changes we need to perform in this example:
- New file: CrunchifyFileUploadController.java
- New file: CrunchifyFileUpload.java
- New file: uploadfile.jsp
- New file: uploadfilesuccess.jsp
- Modified file: crunchify-servlet.xml
- 2 new jar files:
commons-io-2.4.jar
andcommons-fileupload-1.3.jar
Here is a final project structure so you will get some idea on where to add files.
Now let’s get started:
Step1: Pre-Requisite:
http://crunchify.com/hello-world-example-spring-mvc-3-2-1/ (Deploy this project successfully onTomcat)
Maven Dependencies:
Add below new dependencies to your project’s pom.xml
file.
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
>
|
Step2: SpringController
Create a Spring 3 MVC based controller which handles file upload. There are two methods in thiscontroller:
crunchifyDisplayForm
– It simply forwards request to the pageuploadfile.jspcrunchifySave
– Fetches the form using@ModelAttribute
annotation and get the File content from it. It creates a list of filenames of files being uploaded and pass this list to success page.
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"
;
}
}
|
Step3: Model – Form Object
Create a Java bean which acts as Model/Form object for our Spring application. This bean contains a List
of org.springframework.web.multipart.MultipartFile
objects. Spring framework provides a useful class MultipartFile which can be used to fetch the file content of uploaded file. Apart from its content, the MultipartFile object also gives you other useful information such as filename, file size 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
;
}
}
|
Step4: JSP Views
Now create the view pages for this application. We will need two JSPs, one to display file upload form and another to show result on successful upload.
The uploadfile.jsp
displays a form with file input. Apart from this we have added small jquery snippetonclick of Add button. This will add a new file input component at the end of form. This allows user toupload as many files as they want.
Note that we have set enctype=”multipart/form-data”
attribute of our <form>
tag.
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
(
'http://cdn3.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
(
'http://cdn3.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
=
'http://crunchify.com'
>
Crunchify
<
/
a
>
.
Click
<
a
href
=
'http://crunchify.com/category/java-web-development-tutorial/'
>
here
<
/
a
>
for
all
Java
,
Spring
MVC
,
Web
Development
examples
.
<
br
>
<
/
div
>
<
/
div
>
<
/
body
>
<
/
html
>
|
Step5: Update Spring Configuration
Add below bean to crunchify-servlet.xml
file, just above <beanid="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
line.
1
2
|
<
bean
id
=
"multipartResolver"
class
=
"org.springframework.web.multipart.commons.CommonsMultipartResolver"
/
>
|
Step6: Checkout Result
Start tomcat and point your browser to this URL: http://localhost:8080/CrunchifySpringMVC3.2.1/upload.html and you should see screen similar tothis.
After file upload you will see success message like this. You can always beautify your .jsp file the wayyou want.
List of all Spring MVC Examples, Java Examples.