【企业云端全栈开发实践-3】Spring Boot文件上传服务+拦截器

一、静态资源访问

使用IDEA创建Spring Boot项目时,会默认创建classpath://static/目录,静态资源一般放在这个目录下即可。

如果默认的静态资源过滤策略不能满足开发需求,也可以进行自定义的静态资源过滤的策略。

在application.properties中直接定义过滤规则和静态资源位置:
spring.mvc.static-path-pattern=/static/**
spring.web.resources.static-locations=classpath:/static/

过滤规则为/static/**,静态资源位置为 classpath:/static/

也就是说,如果采用默认的静态资源访问时,只需要在域名后直接加上资源的后缀即可,如localhost:8080/test.jpg。

使用spring.mvc.static-path-pattern=/images/** 时就需要如下路径了:localhost:8080/images/test.jpg。

使用spring.web.resources.static-locations=classpath:/xxx 时 就代表是自己创建了一个目录,classpath的意思是编译后在 类路径 target下。(了解即可。)

在这里插入图片描述

二、文件上传原理

前端中的表单enctype属性 规定在发送到服务器之前应该如何对表单的数据进行相关的编码。

表单的enctype=“application/x-www-from-urlencoded(默认)”时,form表单中的数据格式为:key=vlaue。

表单的enctype="multipart/form-data"时,其传输的数据形式如下。

在这里插入图片描述
Spring Boot嵌入的Tomcat限制了请求的文件大小,每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。

如果要更改这个默认值需要在配置文件(如application.properties)中加入 如下两个配置即可:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

当表单的enctype=“multipart/form-data”时,可以使用MultipartFile获取上传的文件数据,再通过transferTo方法将其写入磁盘中去。
在这里插入图片描述
在这里插入图片描述
HttpServletRequest是JavaEE的一个自带类,通过这个类的getServletContext()方法,可以获得前端发来的请求的上下文,就是web服务器,然后就能得到服务器的路径。(需要动态获取)

进行如下的前端模拟请求:
在这里插入图片描述
然后利用transferTo这个方法就可以进行文件存储。
在这里插入图片描述

三、拦截器

拦截器在Web系统中非常的常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现。

总结有如下大致几个使用的场景:
1、权限检查:如登录检测,进入处理程序检测是否登录,如果没有,则直接返回登录页面。
2、性能监控:有时候系统在某段时间莫名其妙很慢,可以通过拦截器在进入处理程序之前记录开始时间,在处理完之后记录结束时间,从而得到该请求的处理时间。
3、通用行为:读取cookie得到用户信息并且将用户对象放入请求,从而方便后续流程使用。

Spring Boot定义了HandlerInterceptor接口来实现自定义拦截器的功能。

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

在这里插入图片描述

3.1 拦截器定义代码

在这里插入图片描述

3.2 拦截器注册

addPathPatterns方法定义拦截的地址。
excludePathPatterns定义排除某些地址不被拦截。
添加的一个拦截器没有addPathPattern任何一个url则默认拦截所有请求。
如果没有excludePathPatterns任何一个请求,则默认不放过任何一个请求。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_51484460/article/details/129180272