首页 > 其他分享 >文件上传与拦截器

文件上传与拦截器

时间:2023-02-24 20:14:32浏览次数:35  
标签:文件 存储 拦截器 请求 方法 上传

静态资源访问

静态资源访问,默认在根路径下加上资源名称即可访问;也可以在配置文件中,自定义访问路径spring.mvc.static-path-pattern=/<自定义路径>/**
以上是默认static目录下;也可以自定义一个目录用来存放资源,需要在配置文件种配置spring.web.resources.static-locations=classpath:/<自定义目录>

文件上传

  • 基本配置:
    1.每个文件默认大小是1Mb,但此请求文件大小不能超过10Mb
    2.在表单的enctype="multipart/form-data"时,可以使用MultipartFile获取上传的文件,再通过transferTo方法将其写入到磁盘中
    注意:一定要将表单类型修改为multipart/form-data

流程:前端上传文件---后端进行接收-----获取上传的数据,接受的变量名要与表单名一致(表单的数据类型要修改为enctype="multipart/form-data")----再通过transferTo方法,及那个文件写入到磁盘中

  • 前端文件上传
  • 获取上传文件:方法的参数必须是MultipartFile类型,这样云端就可以把文件传输进来;再提交表单也可以传递一些别的参数,比如用户姓名等等
  • MultipartFile类型对应的对象,也就是方法中定义的参数,有很多的方法可以调用,比如获取原文件名、文件类型
  • 最终的目的是将文件存储到web服务器本地,所以需要获取到web服务器的运行目录。就要声明一个字符串类型的变量用于存储服务器运行目录。运行目录是动态获取的,需要HttpServletRequest的对象来调用其内部方法来获取,所以在方法参数中还要声明这样一个参数HttpServletRequest request(这是javae中提供的一个原子的类,这个类就代表的是网络请求),这是由前端系统传递的。在动态获取到服务器运行目录之后,我们需要在自定义一个路径,用于存储文件。意思就是,前面用来获取服务器本地的路径就相当于是一个公式,获取到的是不统一的路径,最后要放进的文件名称我们可以定义出来。
  • 按照上面的步骤运行程序之后可能会报错,状态码500,代表是后端出了问题。原因可能是文件的大小,这就提醒我们需要在后台对上传文件的大小进行配置
  • 将文件存储到本地
    java的文件存储代码
  • 文件存储之后,暂时没有办法在网络利用路径去访问的,原因是文件存储的路径并没有被配置为静态资源的存储目录,这就需要我们在配置文件中配置这样一个目录

    这个陌路的配置不需要写classpath,原因是存储目录并没有在class下,这可以在target中被验证

拦截器

  • 拦截器在Web系统中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现。总结起来,拦截器大致有以下几种使用场景:

  • 权限检查:如登录检测,进入处理程序检测是否登录,如果没有,则直接返回登录页面。

  • 性能监控:有时系统在某段时间莫名其妙很慢,可以通过拦截器在进入处理程序之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有提取Locale、Theme信息等,只要是多个处理程序都需要的,即可使用拦截器实现。

  • SpringBoot定义了Handlerceptor接口来实现自定义拦截器的功能

  • Habdlerterceptor接口定义了preHandle、postHandle、afterCompletion三种方法,通过重写这三种方法实现请求前、请求后等操作

    前端发送请求,先到preHandle拦截器,根据拦截器的位置依次调用,最后进入到控制器的方法中;
    控制器响应之后,再去一次电泳postHandle方法;
    页面渲染完毕,再依次调用afterHandle方法。

preHandle应用:比如要访问订单信息,但是,用户没登陆,就不允许访问;这样的是否登录判断过程,实际上就是一种拦截功能的实现

拦截器的定义

  • 1.定义一个普通的类,一般以Interceptor结尾,但需要继承HandlerInterceptor(系统拦截器类),继承之后这个类才被认为是一个拦截器
  • 2.重写父类的一些方法,也就是preHandle、postHandle、afterCompletion,多数情况下只需要重写preHandle即可

    方法定义一些形参,内部定义一些规则,返回Boolean类型,true为通过,false为不通过;通过继续后面的拦截器,不通过就到此为止

拦截器注册

这些步骤完成后,需要对拦截器进行注册,否则拦截器仍然无发使用;
定义一个配置类
1.addPathPatterns方法定义拦截的地址
2.excludePathPatterns定义配出某些地址簿被拦截
3.添加的一个拦截器没有addPathPattern任何一个url则默认拦截所有的请求
4.如果没有excludePathPatterns任何一个请求,则默认不放过任何一个请求

上图所示的addPathPatterns("/user/**")意为拦截user路径下的所有请求

可以通过打印拦截器当中的语句,来判断拦截器是否生效。

标签:文件,存储,拦截器,请求,方法,上传
From: https://www.cnblogs.com/hezhipeng/p/17003848.html

相关文章