SpringMVC文件上传拦截器,大小验证,类型验证

//文件类型判断
public class FileTypeInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler)throws Exception {
        // 判断是否为文件上传请求
        if (request instanceof MultipartHttpServletRequest) {
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            Map<String, MultipartFile> files = multipartRequest.getFileMap();
            Iterator<String> iterator = files.keySet().iterator();
            //对多部件请求资源进行遍历
            while (iterator.hasNext()) {
                String formKey = (String) iterator.next();
                MultipartFile multipartFile = multipartRequest.getFile(formKey);
                String filename=multipartFile.getOriginalFilename();
                //判断是否为限制文件类型
                if (checkFile(filename)) {
                    return true;
                } 
            }
        }
        request.getRequestDispatcher("typeErro.do").forward(request, response);
        return false;
    }


    /**
     * 判断是否为允许的上传文件类型,true表示允许
     */
    private boolean checkFile(String fileName) {
        //设置允许上传文件类型
        String suffixList = "jpg,png,ico,bmp,jpeg";
        // 获取文件后缀
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
        if (suffixList.contains(suffix.trim().toLowerCase())) {
            return true;
        }
        return false;
    }
}
//文件大小
public class FileUploadInterceptor extends HandlerInterceptorAdapter {

    private long maxSize;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //判断是否文件上传
        if(request!=null && ServletFileUpload.isMultipartContent(request)) {
            ServletRequestContext ctx = new ServletRequestContext(request);
            //获取上传文件尺寸大小
            long requestSize = ctx.contentLength();
            if (requestSize > maxSize) {
                //当上传文件大小超过指定大小限制后,模拟抛出MaxUploadSizeExceededException异常
                throw new MaxUploadSizeExceededException(maxSize);
            }
        }
        return true;
    }





    public void setMaxSize(long maxSize) {
        this.maxSize = maxSize;
    }
}

springMVC拦截器配置

    <!--拦截器 -->
    <mvc:interceptors>  

        <!-- 文件上传大小拦截 -->
        <mvc:interceptor>
            <mvc:mapping path="/studentIden/studentInfo.do" />
            <bean class="com.minihourse.interceptor.FileUploadInterceptor">
                <property name="maxSize" value="10485760"/>
            </bean>
        </mvc:interceptor>
        <!-- 文件类型拦截 -->
        <mvc:interceptor>
            <mvc:mapping path="/studentIden/studentInfo.do" />
            <bean class="com.minihourse.interceptor.FileTypeInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>       

猜你喜欢

转载自blog.csdn.net/lnview/article/details/77355850