文件上传
和servlet实现文件上传一样,需要满足的条件如下:
- 都是通过commons-io.jar和common-fileupload.jar
- 实现MultipartResolver接口,该接口SpringMVC已经提供了CommonsMultipartResolver实现类
实现步骤
-
加入jar包
-
配置CommonsMultipartResolver
<!-- 这里的id值必须是这个,不能乱写,springIOc容器在初始化时会自动寻找id为multipartResolver的bean并加入ioc容器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"></property> <!--上传单个文件的最大值,单位是byte,如果值为-1,表示没有限制 --> <property name="maxUploadSize" value="102400"></property> </bean>
上面的配置只是部分配置,在eclipse中可以使用alt+/来查看提示看有哪些配置是我们可以配置的。
-
配置完成后自己就需要完成上传文件的代码
@RequestMapping(value="testUpload") public String testUpload(@RequestParam("text") String text, @RequestParam("file") MultipartFile file) throws IOException { // 输出文件描述信息 System.out.println(text); // 将拿到的文件转换为一个输入流 InputStream inputStream = file.getInputStream(); // 获取上传的文件名 String fileName = file.getOriginalFilename(); // 获取输出流 OutputStream outputStream = new FileOutputStream("d:\\" + fileName); // 所谓的上传文件就是将输入流转换为输出流 byte[] bs = new byte[1024]; // 缓冲区 int len = -1; while((len = inputStream.read(bs)) != -1) { outputStream.write(bs, 0, len); } outputStream.close(); inputStream.close(); return "success"; // 这里返回的是一个视图(配置了前缀和后缀) }
拦截器
SpringMVC要想实现拦截器需要实现一个接口:HandlerInterceptor
自己编写的拦截器
package top.twolovelypig.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MyInterceptor implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse,
Object obj, Exception exception) throws Exception {
System.out.println("视图渲染之后执行");
}
@Override
public void postHandle(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, Object obj,
ModelAndView modelandview) throws Exception {
System.out.println("拦截响应");
}
@Override
public boolean preHandle(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, Object obj)
throws Exception {
System.out.println("拦截请求");
return true; // 返回true表示拦截操作之后依然放行,返回false拦截之后不放行,也就是请求终止
}
}
配置拦截器(SpringMVC.xml)
<!-- 配置拦截器:将自己写的拦截器配置到SpringMVC中,默认是拦截所有请求 -->
<mvc:interceptors>
<!-- 配置具体的拦截路径 -->
<mvc:interceptor>
<!-- 指定拦截的路径,这里/**表示拦截所有的请求 -->
<mvc:mapping path="/**"/>
<!-- 指定不拦截的路径,这里表示不拦截testUpload请求 -->
<mvc:exclude-mapping path="/testUpload"/>
<!-- 最终拦截的结果是取其交集,在第一步中配置的是拦截的所有请求,第二步中配置的是不拦截testUpload请求,综合起来就是拦截除了testUpload之外的所有请求 -->
<bean class="top.twolovelypig.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
如果想要配置多个拦截器,只需要在<mvc:interceptors>
标签里面再写一个<mvc:interceptor>
标签进行配置即可。