spring mvc文件上传下载实例
如果你用的是maven,pom.xml文件如下:
?
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>springMVC_upload</groupId><artifactId>springMVC_upload</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name /><description /><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency><!--Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>3.2.1.RELEASE</version><scope>test</scope></dependency><!--log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><!-- servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><!--fileUpload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><!--io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency></dependencies><build><plugins><plugin><artifactId>maven-war-plugin</artifactId></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.6</source><target>1.6</target></configuration></plugin></plugins></build></project>?
?
配置文件:spring_mvc.xml
?
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 注解资源扫描包路径 --><context:component-scan base-package="org.yzr.controller" /><bean/><bean/><!-- 对模型视图名称的解析,即在模型视图名称添加前后缀,在requestmapping输入的地址后自动调用该类进行视图解析 --><bean id="viewResolver"/><property name="prefix" value="/" /><!-- 跳转页面的前缀路径 如 /web-inf/user/ --><property name="suffix" value=".jsp"></property><!-- 跳转页面后缀 如 helloWorld.jsp --></bean><!-- 上传拦截,如最大上传值及最小上传值 --><bean id="multipartResolver"value="10000000" /></bean></beans>?
?
配置文件:web.xml
?
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name><!-- Spring监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring_mvc.xml</param-value></context-param><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- spring mvc servlet --><servlet><description>spring mvc servlet</description><servlet-name>springMvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><description>spring mvc 配置文件</description><param-name>contextConfigLocation</param-name><param-value>classpath:spring_mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><welcome-file-list><welcome-file>multipartFileUpload.jsp</welcome-file><welcome-file>oneFileUpload.jsp</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>?
?
文件上传与下载:FileUploadAndDownloadController.java
package org.yzr.controller;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import java.util.UUID;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.FileUtils;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.yzr.model.UploadFile;/** * 上传文件 * * @author yizhaorong * */@Controllerpublic class FileUploadAndDownloadController {/** * 单文件上传 * * @param request * @param name * @param file * @return */@RequestMapping(value = "/oneFileUpload", method = RequestMethod.POST)public String handleFormUpload(HttpServletRequest request, @RequestParam("name") String name, @RequestParam("file") MultipartFile file) {String dir = request.getSession().getServletContext().getRealPath("/") + "upload";List<UploadFile> uploadFiles = new ArrayList<UploadFile>();if (!file.isEmpty()) {try {String realName = this.copyFile(file.getInputStream(), dir, file.getOriginalFilename());UploadFile u = new UploadFile();u.setRealName(realName);u.setName(name);uploadFiles.add(u);} catch (IOException e) {e.printStackTrace();}}request.setAttribute("uploadFiles", uploadFiles);return "success";}/** * 多文件上传 * * @param request * @param name * @return */@RequestMapping(value = "/multipartFileUpload", method = RequestMethod.POST)public String upload2(MultipartHttpServletRequest request, @RequestParam("name") String name // 页面上的控件值) {List<UploadFile> uploadFiles = new ArrayList<UploadFile>();List<MultipartFile> files = request.getFiles("file");String dir = request.getSession().getServletContext().getRealPath("/") + "upload";for (int i = 0; i < files.size(); i++) {if (!files.get(i).isEmpty()) {try {String realName = this.copyFile(files.get(i).getInputStream(), dir, files.get(i).getOriginalFilename());UploadFile u = new UploadFile();u.setRealName(realName);u.setName(files.get(i).getOriginalFilename());uploadFiles.add(u);} catch (IOException e) {e.printStackTrace();}}}request.setAttribute("uploadFiles", uploadFiles);return "success";}/** * 文件下载 * * @param response * @param request * @param realName * @param name */@RequestMapping("/download/{realName}/{name}")public void download(HttpServletResponse response, HttpServletRequest request, @PathVariable String realName, @PathVariable String name) {OutputStream os = null;response.reset();realName = request.getSession().getServletContext().getRealPath("/") + "upload" + File.separator + realName;response.setHeader("Content-Disposition", "attachment; filename=" + name);response.setContentType("application/octet-stream; charset=utf-8");try {os = response.getOutputStream();os.write(FileUtils.readFileToByteArray(new File(realName)));os.flush();} catch (IOException e) {e.printStackTrace();} finally {if (os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}}/** * 写文件到当前目录的upload目录中 * * @param in * @param fileName * @throws IOException */private String copyFile(InputStream in, String dir, String fileName) throws IOException {fileName = fileName.substring(fileName.lastIndexOf("."));String realName = UUID.randomUUID().toString() + fileName;File file = new File(dir, realName);if (!file.exists()) {if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}file.createNewFile();}FileUtils.copyInputStreamToFile(in, file);return realName;}}
?
用于保存上传文件的基本属性的类:UploadFile.java
package org.yzr.model; import java.io.Serializable; public class UploadFile implements Serializable {private static final long serialVersionUID = 1L;private int id;private String realName;private String name; public int getId() {return id;} public void setId(int id) {this.id = id;} public String getRealName() {return realName;} public void setRealName(String realName) {this.realName = realName;} public String getName() {return name;} public void setName(String name) {this.name = name;}}
?附件提供的是maven版的文件
?