SpringMVC文件上传和拦截器

Posted 月下赶路人

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>描述&nbsp;&nbsp;&nbsp;&nbsp;</td>
            <td>
                <input type="text" name="desc" value="">
            </td>
        </tr>
        <tr>
            <td>头像&nbsp;&nbsp;&nbsp;&nbsp;</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文件上传和拦截器的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC文件上传和拦截器

JAVAEE框架技术之6-springMVC拦截器和文件上传功能

JAVAEE框架技术之6-springMVC拦截器和文件上传功能

JAVAEE框架技术之6-springMVC拦截器和文件上传功能

SpringMVC——文件上传拦截器

springMVC