Springmvc 简明教程
Spring MVC - File Upload Example
以下示例展示了如何在表单中使用文件上传控件及使用 Spring Web MVC 框架。首先准备一个可用的 Eclipse IDE,并遵循以下步骤使用 Spring Web 框架开发一个基于动态表单的 Web 应用程序。
The following example shows how to use File Upload Control in forms using the Spring Web MVC framework. To start with, let us have a working Eclipse IDE in place and adhere to the following steps to develop a Dynamic Form based Web Application using the Spring Web Framework.
Step |
Description |
1 |
Create a project with a name HelloWeb under a package com.tutorialspoint as explained in the Spring MVC - Hello World chapter. |
2 |
Create Java classes FileModel, FileUploadController under the com.tutorialspoint package. |
3 |
Create view files fileUpload.jsp, success.jsp under the jsp sub-folder. |
4 |
Create a folder temp under the WebContent sub-folder. |
5 |
Download Apache Commons FileUpload library commons-fileupload.jar and Apache Commons IO library commons-io.jar. Put them in your CLASSPATH. |
6 |
The final step is to create the content of the source and configuration files and export the application as explained below. |
FileModel.java
package com.tutorialspoint;
import org.springframework.web.multipart.MultipartFile;
public class FileModel {
private MultipartFile file;
public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file = file;
}
}
FileUploadController.java
package com.tutorialspoint;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.FileCopyUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class FileUploadController {
@Autowired
ServletContext context;
@RequestMapping(value = "/fileUploadPage", method = RequestMethod.GET)
public ModelAndView fileUploadPage() {
FileModel file = new FileModel();
ModelAndView modelAndView = new ModelAndView("fileUpload", "command", file);
return modelAndView;
}
@RequestMapping(value="/fileUploadPage", method = RequestMethod.POST)
public String fileUpload(@Validated FileModel file, BindingResult result, ModelMap model) throws IOException {
if (result.hasErrors()) {
System.out.println("validation errors");
return "fileUploadPage";
} else {
System.out.println("Fetching file");
MultipartFile multipartFile = file.getFile();
String uploadPath = context.getRealPath("") + File.separator + "temp" + File.separator;
//Now do something with file...
FileCopyUtils.copy(file.getFile().getBytes(), new File(uploadPath+file.getFile().getOriginalFilename()));
String fileName = multipartFile.getOriginalFilename();
model.addAttribute("fileName", fileName);
return "success";
}
}
}
HelloWeb-servlet.xml
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package = "com.tutorialspoint" />
<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value = "/WEB-INF/jsp/" />
<property name = "suffix" value = ".jsp" />
</bean>
<bean id = "multipartResolver"
class = "org.springframework.web.multipart.commons.CommonsMultipartResolver" />
</beans>
这里,对于第一个服务方法 fileUploadPage() ,我们在 ModelAndView 对象中传递了一个空白 FileModel 对象,名称为 command,因为如果您在您的 JSP 文件中使用了 <form:form> 标签,Spring 框架会期盼一个名称为 command 的对象。因此,当调用 fileUploadPage() 方法时,它会返回 fileUpload.jsp 视图。
Here, for the first service method fileUploadPage(), we have passed a blank FileModel object in the ModelAndView object with name "command", because the spring framework expects an object with name "command", if you are using <form:form> tags in your JSP file. So, when fileUploadPage() method is called, it returns fileUpload.jsp view.
第二个服务方法 fileUpload() 将被用于对比 HelloWeb/fileUploadPage URL 的 POST 方法。您将根据提交的信息准备要上传的文件。最后,服务方法会返回 success 视图,这将导致呈现 success.jsp。
The second service method fileUpload() will be called against a POST method on the HelloWeb/fileUploadPage URL. You will prepare the file to be uploaded based on the submitted information. Finally, a "success" view will be returned from the service method, which will result in rendering success.jsp.
fileUpload.jsp
<%@ page contentType="text/html; charset = UTF-8" %>
<%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form"%>
<html>
<head>
<title>File Upload Example</title>
</head>
<body>
<form:form method = "POST" modelAttribute = "fileUpload"
enctype = "multipart/form-data">
Please select a file to upload :
<input type = "file" name = "file" />
<input type = "submit" value = "upload" />
</form:form>
</body>
</html>
这里,我们使用 modelAttribute 属性以及值为 fileUpload 来映射文件上传控件和服务器模型。
Here, we are using modelAttribute attribute with value="fileUpload" to map the file Upload control with the server model.
success.jsp
<%@ page contentType = "text/html; charset = UTF-8" %>
<html>
<head>
<title>File Upload Example</title>
</head>
<body>
FileName :
lt;b> ${fileName} </b> - Uploaded Successfully.
</body>
</html>
在创建原代码和配置文件后,导出您的应用程序。右键单击您的应用程序,使用 Export → WAR File 选项,并将 HelloWeb.war 文件保存到 Tomcat 的 webapps 文件夹中。
Once you are done with creating source and configuration files, export your application. Right click on your application, use Export → WAR File option and save the HelloWeb.war file in the Tomcat’s webapps folder.
现在,启动 Tomcat 服务器并确保能够使用标准浏览器访问 webapps 文件夹中的其他网页。尝试以下 URL - http://localhost:8080/HelloWeb/fileUploadPage 如果 Spring Web 应用程序一切正常,我们会看到以下屏幕。
Now, start your Tomcat server and make sure you are able to access other webpages from the webapps folder using a standard browser. Try a URL– http://localhost:8080/HelloWeb/fileUploadPage and we will see the following screen, if everything is fine with the Spring Web Application.
提交所需信息后,单击提交按钮提交表单。如果 Spring Web 应用程序一切正常,您应该看到以下屏幕。
After submitting the required information, click on the submit button to submit the form. You should see the following screen, if everything is fine with the Spring Web Application.