前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【企业云端全栈开发实践-3】Spring Boot文件上传服务+拦截器

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

作者头像
程序员洲洲
发布2024-06-07 12:36:26
760
发布2024-06-07 12:36:26
举报
文章被收录于专栏:项目文章项目文章

一、静态资源访问

使用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)中加入 如下两个配置即可:

代码语言:javascript
复制
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任何一个请求,则默认不放过任何一个请求。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、静态资源访问
  • 二、文件上传原理
  • 三、拦截器
    • 3.1 拦截器定义代码
      • 3.2 拦截器注册
      相关产品与服务
      文件存储
      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档