SpringMVC——文件上传拦截器
Posted Johnny*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC——文件上传拦截器相关的知识,希望对你有一定的参考价值。
SpringMVC实现文件上传
SpringMVC可以简化文件上传的代码,但是必须实现MultipartResolver接口;该接口的实现类SpringMVC已经提供了就是CommonMutilpartResolver。那么只要将其配置到SpringMVC配置文件中并设置相应属性即可。
- jar包
commons-fileupload.jar 和commons-io.jar
2. 配置CommonMultipartResolver,将其加入到SpringIOC容器中
<!-- 配置文件上传
注意id值不能更改,只能是multipartResolver,原因是SpringIoc容器在启动会去找id为multipartResolver的bean 这是约定
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设置单个文件最大上传大小 单位是字节 -1表示不限制 注意不用双引号引起来-->
<property name="maxUploadSize" value="1024000"></property>
</bean>
Controller层保存上传的文件到服务器
@RequestMapping("testFileUpload")
public String testFileUpload(@RequestParam("desc")String desc, @RequestParam("file") MultipartFile file) throws IOException {
System.out.println("文件描述信息:"+desc);
String filename = file.getOriginalFilename();
InputStream in = file.getInputStream(); //获取文件IO流
OutputStream out = new FileOutputStream("d:\\\\"+filename);
int len = -1;
byte[] buff = new byte[1024];
while( (len = in.read(buff)) != - 1) {
out.write(buff,0,len);
}
out.close();
in.close();
System.out.println("上传成功!");
return "success";
}
上传页面 testuploadFile.jsp
<form action="testFileUpload" enctype="multipart/form-data" method="post">
<input name="file" type="file">
文件描述:<input name ="desc">
<input type="submit">
</form>
拦截器
拦截器原理与过滤器一样。SpringMVC,要想实现拦截器,必须实现一个接口HandlerInterceptor
- 编写自己的拦截器,该拦截器实现 HandlerInterceptor接口
- 将自己写的拦截器配置到SpringMVC中
自定义拦截器MyInterceptor ,实现 HandlerInterceptor接口,重写preHandle、postHandle、afterCompletion方法。
package com.johnny.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MyInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("请求前");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {
System.out.println("响应前");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("页面渲染前");
}
}
配置拦截器
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截路径 ant风格 ** 表示所有目录 -->
<mvc:mapping path="/**" />
<!-- 排除路径 -->
<mvc:exclude-mapping path="/testInterceptor"/>
<!-- 两句的意思是 表示除了 /testInterceptor 其余都拦截 -->
<bean id="myInterceptor" class="com.johnny.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
可以配置多个拦截器,形成拦截链。
package com.johnny.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MyInterceptor2 implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("请求前……2222");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {
System.out.println("响应前…… 2222");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("页面渲染前…… 222");
}
}
<!-- 再配置一个拦截器 变成拦截链 -->
<mvc:interceptor>
<!-- 拦截路径 ant风格 ** 表示所有目录 -->
<mvc:mapping path="/**" />
<!-- 排除路径 -->
<mvc:exclude-mapping path="/testInterceptor"/>
<!-- 两句的意思是 表示除了 /testInterceptor 其余都拦截 -->
<bean id="myInterceptor2" class="com.johnny.interceptor.MyInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
拦截后请求一个被拦截的链接: /testUpload,结果 如下:
以上是关于SpringMVC——文件上传拦截器的主要内容,如果未能解决你的问题,请参考以下文章
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
JAVAEE框架技术之6-springMVC拦截器和文件上传功能