[Java] Spring2文件上传实例 [复制链接] 李凯 项目结构视图:web.xml文件内容: <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" 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_2_5.xsd"><servlet> <servlet-name>spring-action</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>spring-action</servlet-name> <url-pattern>*.mhtml</url-pattern></servlet-mapping><welcome-file-list> <welcome-file>testuploadfile.jsp</welcome-file></welcome-file-list></web-app> 复制代码 spring-action-servlet.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!--使用Spring已集成的Commons FileUpload上传组件。1.为了让DispatcherServlet处理MultipartRequest,在Spring配置文件中声明一个MultipartResolver。这样一旦某个Request是一个MultipartRequest,它就会首先被MultipartResolver处理,然后再转发到相应的Controller。--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- set the max upload size10MB --> <property name="maxUploadSize"> <value>10485760</value> </property></bean> 复制代码 <!--2.配置一个Controller,来处理上传的文件。--><bean name="fileUploadController" autowire-candidate="false" class="test.web.controller.uploadfile.FileUploadController"> <property name="commandClass" value="java.lang.Object" /> <!-- 上传失败时跳转页面 --> <property name="formView" value="/user/err.jsp" /> <!-- 上传成功时跳转页面 --> <property name="successView" value="redirect:/testuploadfile.jsp" /> <property name="uploadDir" value="c:/testUploadFile/" /></bean> 复制代码 <!--3.配置一个URL映射控制器,直接将URL映射到相应的控制器处理。--><bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/testuploadfile.mhtml"> fileUploadController </prop> </props> </property></bean> 复制代码 <!--4.配置一个视图解析器,将逻辑视图名解析为一个用模板文件(如JSP或Velocity模板)渲染的视图对象。--><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="requestContextAttribute" value="rc" /> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="" /> <property name="suffix" value=".jsp" /></bean></beans> 复制代码 FileUploadController.java文件内容: package test.web.controller.uploadfile;import java.io.File;import java.util.Iterator;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.validation.BindException;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.SimpleFormController;public class FileUploadController extends SimpleFormController {private String uploadDir;//上传文件路径public void setUploadDir(String uploadDir) { this.uploadDir = uploadDir;}public String getUploadDir() { return this.uploadDir;}protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd, BindException errors) throws Exception { uploadFile(request); return new ModelAndView(getSuccessView());}private void uploadFile(HttpServletRequest request) { // 转型为MultipartHttpRequest: MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // 遍历所有文件域,获得上传的文件 for (Iterator it = multipartRequest.getFileNames(); it.hasNext();) { String key = (String) it.next(); MultipartFile file = multipartRequest.getFile(key); saveFile(file); }}private void saveFile(MultipartFile file) { if (file == null || file.isEmpty()) return; String filename = file.getOriginalFilename(); String localfileName = uploadDir + filename; // 写入文件 File source = new File(localfileName.toString()); try { file.transferTo(source); } catch (Exception e) { e.printStackTrace(); }}} 复制代码 testuploadfile.jsp文件内容: <%@ page language="java" contentType="text/html; charset=UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style> .addAttachFileUrl{ position: relative; font-size: 12px; } .file { position: absolute; width: 1px; left: -3px; filter: Alpha(opacity=0); cursor: hand; top: -3px; } .filelistItem { display: block; background: #ffffcc; font: "宋体"; font-size: 12px; } </style> <script type="text/javascript"> var i=1; //文件上传 var attachname = "attach_"; function addFile(obj){ if(obj.value.length>0){ var fileNewInput = document.createElement("<input type='file' name='"+ attachname + i + "' class='file' οnchange='addFile(this)'/>"); var fileName = document.createElement("span"); fileName.className = "filelistItem"; fileName.innerHTML = obj.value+ " <a href='javascript:void(0)' οnclick='delFile(this)'>删除</a>"; fileName.appendChild(obj); document.getElementById("filelist").appendChild(fileName); document.getElementById("filebutton").appendChild(fileNewInput) obj.style.display="none"; i = i + 1; } } function delFile(obj){ document.getElementById("filelist").removeChild(obj.parentNode) } </script></head><body> <FORM id="myForm" method="POST" enctype="multipart/form-data" action="testuploadfile.mhtml"> 上传附件:<div id="filelist"></div> <br /> <a class="addAttachFileUrl" href="javascript:void(0)" id="filebutton">点击添加附件 <input type="file" name="file_0" class="file" οnchange="addFile(this)" /> </a> <br /> <input type="submit" value="提交"> </FORM></body></html> 复制代码