一、开发环境搭建
下载相应的jar包:
1.commons-fileupload
2.commons-io
web.xml 文件配置:
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
spring-mvc.xml 文件配置:
<!--开启注解扫描器 -->
<context:component-scan base-package="com.zhiyou"/>
<!-- 开启MVC扫描器 -->
<mvc:annotation-driven/>
<!-- 定义视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 处理文件上传下载的组件 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的大小,单位字节为(10M) -->
<property name="maxUploadSize">
<value>10485760</value>
</property>
<!-- 请求的编码格式,必须和jsp的pageEncoding属性编码一致
以便于正确读取表单,默认的是IOS-8859-1 -->
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
二、实现文件上传
文件实现页面和消息回馈页面
Upload.jsp 页面带码块
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form action="upload.do" enctype="multipart/form-data" method="post">
<table>
<tr>
<td>文件描述</td>
<td><input type="text" name="description"/></td>
</tr>
<tr>
<td>请选择文件</td>
<td><input type="file" name="file"></td>
</tr>
<tr>
<td><input type="submit" value="上传"/></td>
</tr>
</table>
</form>
</body>
message.jsp 回馈页面代码块
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>显示文件</title>
</head>
<body>
<h1>已上传文件</h1>//要上传的文件的绝对路径+要上传的文件名
<img alt="图片" src="${pageContext.request.contextPath}/images/${image}"/>
</body>
处理文件上传的controller层(控制层)
在controller层接收的时候需要用@RequestParam("description") String description,
@RequestParam("file") MultipartFile file来接收,如果是多个图片就是@RequestParam("file") MultipartFile[] files来接收
通过工具类处理返回要存入实体类的图片的路径
package com.zhiyou;
import java.io.File;
import java.io.IOException;import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;/**
* SpringMVC文件上传分解器:CommonsMultipartResolver
* 用于处理文件上传,当收到请求时DispatcherServlet的
* checkMultipart()方法时会调用Commons是MultipartResolver
* 的isMultipart()方法判断请求中是否含有文件。如果文件中含有文件,
* 则调用CommonsMultipartResolver的resolverMultipart()方法
* 进行文件解析并封装成MultipartHttpServletRequest(继承了HttpServletRequest),
* 并传递给controller
* @author Administrator
*
*/
@Controller
public class UploadController {
@RequestMapping("/upload.do")
public String upload(HttpServletRequest request,
@RequestParam("description") String description,
@RequestParam("file") MultipartFile file) throws IllegalStateException, IOException {
System.out.println(file);
System.out.println(description);
// 如果文件不为空,写入上传路径
if (!file.isEmpty()) {// 注意:为了保证服务器安全,要上传的文件应该放在外界无法直接访问的目录下,比如放在WEB-INF目录下
// 将文件写入工作空间webapp下的images中
String path = "E:\\eclipse\\SpringUploadCopy\\src\\main\\webapp\\images";
String filename = file.getOriginalFilename();// 设置要上传的文件的文件名
request.setAttribute("image", filename);
// 判断路径是否存在,不存在则新建一个
File file2 = new File(path, filename);
if (!file2.getParentFile().exists()) {
file2.getParentFile().mkdirs();
}
//将上传的文件保存到一个文件目录里
file.transferTo(new File(path+File.separator+filename));// 跳转到message.jsp页面
return "message";
}else {// 如果文件为空则跳转到错误页面
return "error";
}
}
}