SpringMVC文件上传和拦截器
Posted Lotus_dong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC文件上传和拦截器相关的知识,希望对你有一定的参考价值。
文件上传
1.首先我们要导入文件上传下载所需的jar文件
<!--上传/下载文件时必须依赖apache提供的jar包-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
2.配置文件解析器
<!--
文件解析器
maxUploadSize:编码最大的上传的数量
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760"></property>
</bean>
3.设置文件上传的表单属性
(1)method=“post”
(2)enctype=“multipart/form-data” 以二进制形式提交文件数据时,在控制器中不能正常接收,spring框架可以结合apache的文件上传组件,对二进制的数据进行封装,我们就可以在控制器中接收到想要的数据。
(3)accept=".jpg,.png" 限制选择文件时的后缀。
<form action="upLoad" method="post" enctype="multipart/form-data" target="_top">
<table>
<tr>
<td>描述 </td>
<td>
<input type="text" name="desc" value="">
</td>
</tr>
<tr>
<td>头像 </td>
<td>
<input type="file" name="fileName" accept=".jpg,.png" value="">
</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" value="上传">
</td>
</tr>
</table>
</form>
4.设置控制器类的标签
/*
上传文件(图像)
CommonsMultipartFile接收客户端传输的二进制文件,由SpringMVC和apache的文件上传组件解析后的流
*/
@PostMapping(path = "/upLoad")
public String upLoad(@RequestParam("fileName") CommonsMultipartFile file,
String desc,
HttpSession session) {
try {
User user = (User) session.getAttribute("user");
file.getName();//前端设置的文件name 如fileName
//获取文件原始名 如libai.jpg
String OriginalFilename = file.getOriginalFilename();
//获取文件类型
String FileType = file.getContentType();
//获取输入流对象
InputStream FileStream = file.getInputStream();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
拦截器
SpringMVC定义了拦截器接口HandlerInterceptor,该接口定义了三个方法,这三个方法的调用时在SpringMVC框架内部完成的,调用这三个方法的时候,其参数值也是从框架内部传递进来的。拦截器主要是针对要进入Controller的请求。
1.boolean preHandle
预处理方法,实现处理器方法的预处理,就是在处理器方法执行之前这个方法会被执行,相当于拦截了处理器方法,框架会传递请求和响应对象给该方法,第三个参数被拦截的处理器方法。如果preHandle方法返回true表示继续流程,返回flase表示流程中断,不会继续调用其它的拦截器或处理器方法,此时需要通过response来响应。
2.void postHandle
后处理方法,实现处理器方法的后处理,就是在处理器方法调用完成,但在渲染视图之前,该方法被调用,此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理。
3.afterCompletion
整个请求处理完毕,在视图渲染完毕时该方法被执行。
public class TestInterceptor implements HandlerInterceptor {
/*
当请求到达控制器前被执行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("之前执行");
return false;
}
/*
控制器方法执行之后执行
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("控制器方法执行之后执行");
}
/*
整个请求结束后执行
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("请求结束后执行");
}
}
在Spring.xml中注册拦截器
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--进入拦截器的方法-->
<mvc:mapping path="/**"/>
<!--不包含 放行的地址-->
<mvc:exclude-mapping path="/user/toLogin"/>
<mvc:exclude-mapping path="/user/login"/>
<mvc:exclude-mapping path="/static/**"/>
<bean id="islogin" class="com.cwd.ssm.util.TestInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
以上是关于SpringMVC文件上传和拦截器的主要内容,如果未能解决你的问题,请参考以下文章
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
JAVAEE框架技术之6-springMVC拦截器和文件上传功能