一、导入jar包依赖
<!-- SpringMVC jar --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.18.RELEASE</version> </dependency> <!-- 日志 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- 文件上传 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> |
二、SpringMVC配置文件
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 配置扫描包的路径 --> <!-- <context:component-scan base-package="com.wskj.web"> --> <context:component-scan base-package="com.wskj"> <!-- 排除扫描@Repository 和@Service --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/> </context:component-scan> <!-- 注解驱动 相当于配置了处理器映射器与处理器适配器 --> <mvc:annotation-driven conversion-service="formattingFactoryBean"/> <!-- 日期时间转换器配置 --> <bean id="formattingFactoryBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> </bean>
<!-- 视图解析器器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置视图的后缀 --> <property name="suffix" value=".jsp"></property> </bean>
<!-- 静态资源放行的第一种方式 --> <mvc:default-servlet-handler/>
<!-- 文件上传配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置上传文件的编码 --> <property name="defaultEncoding" value="utf-8"></property> <!-- 设置允许上传文件的大小 --> <property name="maxUploadSize" value="10240000"></property> </bean> </beans> |
三、web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app> <display-name>springmvc入门</display-name> <!-- 加载Spring的配置文件 初始化spring容器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- SpringMVC的前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 加载springmvc的配置文件 如果没有指定位置 那么默认去WEB-INF下去找 以该Servlet名称-servlet命名的xml配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <!-- 服务器启动时加载此Servlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- /* 拦截所有 包括jsp css js img...这是真的拦截所有内容(不推荐使用) *.do *.action 后缀名匹配 根据业务的需要后缀名拦截 肯定可以使用 / 拦截所有但不包括jsp 强烈推荐使用(css js img... 通过其他的方式放行) --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> |
四、Controller创建
package com.wskj.web;
import java.io.File;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile;
/** * * @author lzl * @Date 2018年11月8日上午9:36:25 * @Descrption 文件上传 */ @Controller @RequestMapping("file") public class FileUploadController {
@RequestMapping(value="fileupload",method= {RequestMethod.GET}) public String fileUpload() {
return "../fileupload"; } @RequestMapping(value="fileupload",method= {RequestMethod.POST}) public String fileUpload(MultipartFile photo,HttpServletRequest req) { //判断上传文件是否为空 if(photo!=null) { //获取文件的名称 String name = photo.getName();//不带后缀名 只是文件的名称 String originalFilename = photo.getOriginalFilename();//带后缀名 System.out.println("name:"+name); System.out.println("originalFilename:"+originalFilename); //获取文件的大小 单位是字节 long size = photo.getSize(); System.out.println("文件大小:"+size*1.0/1024+"kb"); //获取文件存储位置绝对路径 String realPath = req.getServletContext().getRealPath("/files"); //将上传的文件保存到指定位置 try { photo.transferTo(new File(realPath+"/"+originalFilename)); } catch (Exception e) { e.printStackTrace(); } } return "../fileupload"; } /** * 多文件上传 * * @param photo * @param req * @return */ @RequestMapping(value = "fileuploads", method = { RequestMethod.POST }) public String fileUploads(MultipartFile[] photos, HttpServletRequest req) { // 判断上传文件是否为空 if (photos != null) { for (MultipartFile photo : photos) { // 获取文件的名称 String name = photo.getName();// 不带后缀名 只是文件的名称 String originalFilename = photo.getOriginalFilename();// 带后缀名 System.out.println("name:" + name); System.out.println("originalFilename:" + originalFilename); //获取文件的扩展名 String kzm = originalFilename.substring(originalFilename.lastIndexOf(".")); //为了避免文件名称的重复 我们使用UUID String fileName=UUID.randomUUID().toString()+kzm; // 获取文件的大小 单位是字节 long size = photo.getSize(); System.out.println("文件大小:" + size * 1.0 / 1024 + "kb"); // 获取文件存储位置绝对路径 String realPath = req.getServletContext().getRealPath("/files"); // 将上传的文件保存到指定位置 try { photo.transferTo(new File(realPath + "/" + fileName)); } catch (Exception e) { e.printStackTrace(); } } } return "../fileupload"; } } |
五、jsp页面
1、单文件上传
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>文件上传</title> <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.12.4.js"></script> </head> <body> <form action="${pageContext.request.contextPath}/file/fileupload" method="post" enctype="multipart/form-data"> <table> <tr> <td>请选择图片:</td> <td> <input type="file" name="photo" /> </td> </tr> <tr> <td></td> <td> <input type="image" src="${pageContext.request.contextPath}/img/btn.png"/> </td> </tr> </table> </form> </body> </html> |
2、批量上传文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>文件上传</title> <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.12.4.js"></script> </head> <body> <form action="${pageContext.request.contextPath}/file/fileuploads" method="post" enctype="multipart/form-data"> <table> <tr> <td>请选择图片:</td> <td> <input type="file" name="photos" /> </td> </tr> <tr> <td>请选择图片:</td> <td> <input type="file" name="photos" /> </td> </tr> <tr> <td>请选择图片:</td> <td> <input type="file" name="photos" /> </td> </tr> <tr> <td>请选择图片:</td> <td> <input type="file" name="photos" /> </td> </tr> <tr> <td></td> <td> <input type="image" src="${pageContext.request.contextPath}/img/btn.png"/> </td> </tr> </table> </form> </body> </html> |