Spring MVC 如何上傳多個檔案到指定位置
<a target="_blank" href="http://blog.csdn.net/opengl_es">轉載請保留此句:太陽火神的美麗人生 - 本部落格專注于 靈活開發及移動和物聯裝置研究:iOS、Android、Html5、Arduino、pcDuino,否則,出自本部落格的文章拒絕轉載或再轉載,謝謝合作。</a>
SHORT LINK:

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: <code>commons-io-2.4.jar</code> and <code>commons-fileupload-1.3.jar</code>
Here is a final project structure so you will get some idea on where to add files.
Add below new dependencies to your project’s <code>pom.xml</code> file.
Add belwo to 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>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
Create a Spring 3 MVC based controller which handles file upload. There are two methods in thiscontroller:
<code>crunchifyDisplayForm</code> – It simply forwards request to the pageuploadfile.jsp
<code>crunchifySave</code> – Fetches the form using <code>@ModelAttribute</code> 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.
CrunchifyFileUploadController.javaJava
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";
}
Create a Java bean which acts as Model/Form object for our Spring application. This bean contains a <code>List</code> of <code>org.springframework.web.multipart.MultipartFile</code> 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.
CrunchifyFileUpload.javaJava
package com.crunchify.form;
public class CrunchifyFileUpload {
private List<MultipartFile> crunchifyFiles;
public List<MultipartFile> getFiles() {
return crunchifyFiles;
public void setFiles(List<MultipartFile> files) {
this.crunchifyFiles = files;
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 <code>uploadfile.jsp</code> 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 <code>enctype=”multipart/form-data”</code> attribute of our <code><form></code> tag.
uploadfile.jsp
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>
<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>
<td><input name="files[1]" type="file" /></td>
</table>
<br />
<input type="submit" value="Upload" />
<input id="addFile" type="button" value="Add File" />
</form:form>
<br />
</div>
</body>
</html>
uploadfilesuccess.jsp
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<title>Crunchify - Upload Multiple Files Example</title>
<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 />
<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>
Add below bean to <code>crunchify-servlet.xml</code> file, just above <code><beanid="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"></code> line.
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
After file upload you will see success message like this. You can always beautify your .jsp file the wayyou want.
Have anything to add to this article? Please chime in and join the conversion.
<a target="_blank" href="http://crunchify.com/spring-mvc-how-to-declare-a-bean-in-spring-application/">Spring MVC: How to Declare a Bean in Spring Application?</a>
<a target="_blank" href="http://crunchify.com/simplest-spring-mvc-hello-world-example-tutorial-spring-model-view-controller-tips/">Simplest Spring MVC Hello World Example / Tutorial – Spring Model – View – Controller Tips</a>
<a target="_blank" href="http://crunchify.com/how-to-use-ajax-jquery-in-spring-web-mvc-jsp-example/">How to use AJAX, jQuery in Spring Web MVC (.jsp) – Example</a>
<a target="_blank" href="http://crunchify.com/working-on-spring-mvc-project-how-to-report-list-of-all-loaded-spring-beans-during-startup/">Working on Spring MVC Project? How to Report List of All Loaded Spring Beans during Startup?</a>
<a target="_blank" href="http://crunchify.com/how-to-update-sparkline-graph-every-3-seconds-in-spring-mvc-realtime-update/">How to Update Sparkline Graph Every 3 Seconds in Spring MVC (Realtime Update)</a>
<a target="_blank" href="http://crunchify.com/wordpress-how-to-save-time-on-files-upload/">WordPress: How to Save Time on Files Upload</a>
<a target="_blank" href="http://crunchify.com/spring-mvc-introduction-to-spring-3-mvc-framework/">Spring MVC: Introduction to Spring 3 MVC Framework – Spring 4</a>
<a target="_blank" href="http://crunchify.com/spring-mvc-how-to-access-modelmap-values-in-a-jsp/">Spring MVC: How to Access ModelMap Values in a JSP?</a>
<a target="_blank" href="http://crunchify.com/read-config-properties-value-using-spring-singleton-scope-in-your-java-enterprise-application/">Read config.properties value using Spring ‘singleton’ Scope in your Java Enterprise Application</a>
<a target="_blank" href="http://crunchify.com/how-to-sort-list-of-files-based-on-last-modified-time-in-ascending-and-descending/">How to Sort List of Files based on Last Modified Time in Ascending and Descending?</a>
Be sure to subscribe to the Crunchify newsletter and get regular updates about awesomeposts just like this one and more! Join more than 13000 subscribers!
Enter your emailaddress...