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

news2025/7/29 22:12:16

本节目录

  • 一、静态资源访问
  • 二、文件上传原理
  • 三、拦截器
    • 3.1 拦截器定义代码
    • 3.2 拦截器注册

一、静态资源访问

使用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任何一个请求,则默认不放过任何一个请求。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做独立开发者,能在AppStore赚到多少钱?

成为一名独立开发者,不用朝九晚五的上班,开发自己感兴趣的产品,在AppStore里赚美金,这可能是很多程序员的梦想,今天就来盘一盘,这个梦想实现的概率有多少。 先来了解一些数据: 2022年5月26日&am…

目标跟踪系列总结

目标跟踪算法: sort算法: sort算法流程图 关联成功的检测box与追踪box处理:使用检测的box对追踪结果进行KalmanFilter权重以及参数更新,同时记录关联追踪box的计数次数; 未关联成功的box处理:对检测的box进行KalmanF…

C++【内存管理】

文章目录C内存管理一、C/C内存分布1.1.C/C内存区域划分图解:1.2.根据代码进行内存区域分析二、C内存管理方式2.1.new/delete操作内置类型2.2.new和delete操作自定义类型三、operator new与operator delete函数四、new和delete的实现原理4.1.内置类型4.2.自定义类型4…

如何利用有限的数据发表更多的SCI论文?——利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响

SCI的写作和发表是科研人提升自身实力和实现自己价值的必要途径。“如何利用有限的数据发表更多的SCI论文?”是我们需要解决的关键问题。软件应用只是过程和手段,理解事件之间的内在逻辑和寻找事物之间的内在规律才是目的。如何利用有限的数据发表更多的…

互联网企业如何进行数字化转型?业务需求迭代频繁的应对之策!

互联网行业作为我国数字经济发展“四化”框架中生产力主要组成部分,是国家数字化转型的主要推动者之一。为此,相对于其他传统行业来说,互联网行业企业数字化转型的紧迫程度更高,如果不数字化转型或者转型不成功,会有更…

ArcGIS制作地形分析

ArcGIS制作地形分析的方法解析 树谷资料库资源大全(2月9日更新) 在地形变化较大的建筑、景观、城市设计项目中,高程、坡度、坡向分析是非常重要的,而在这几类分析中,ArcGIS软件可以比较方便的完成相关分析的制作。今…

OAuth2.0入门

什么是OAuth2.0 OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或…

HTML基础(3)

HTML基础单选框、复选框、下拉框文本框< script >标签属性< script >基本使用单选框、复选框、下拉框 文本框 < script >标签属性 type属性定义script元素包含或src引用的脚本语言。属性值是MIME类型&#xff0c;包括text/javascript,text/ecmascript, appl…

SpringBoot2零基础到项目实战-基础篇

SSM内容01-SpringBoot工程入门案例开发步骤SpringBoot 是 Pivotal 团队提供的全新框架&#xff0c;设计目的是简化 Spring 应用的初始搭建以及开发过程。使用了 Spring 框架后已经简化了我们的开发。而 SpringBoot 又是对 Spring 开发进行简化的&#xff0c;可想而知 SpringBoo…

使用DQN进行价格管理

文章目录前言一、不同的价格响应二、利用DQN优化定价策略1.定义环境2.DQN算法概述3.Algorithm: Deep Q Network (DQN)总结强化学习-定价、决策前言 供应链和价格管理是企业运营中最早采用数据科学和组合优化方法的领域&#xff0c;并且在使用这些技术方面有着悠久的历史&#…

RabbitMQ 实现延迟队列

业务场景&#xff1a;1.生成订单30分钟未支付&#xff0c;则自动取消&#xff0c;我们该怎么实现呢&#xff1f;2.生成订单60秒后,给用户发短信1 安装rabbitMqwindows安装ubuntu中安装2 添加maven依赖<!-- https://mvnrepository.com/artifact/org.springframework.boot/spr…

内网渗透(五十四)之域控安全和跨域攻击-利用krbtgt哈希值获取目标域控

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

sqlmap工具

sqlmap Sqlmap是一个开源的渗透测试工具&#xff0c;可以用来自动化的检测&#xff0c;利用SQL注入漏洞&#xff0c;获取数据库服务器的权限。目前支持的数据库有MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access等大多数据库 Sqlmap采用了以下5种独特的SQ…

2023年,拥有软考证书在这些地区可以领取福利补贴

众所周知&#xff0c;软考的含金量很高&#xff0c;比如可以入户、领取技能补贴、抵扣个税、以考代评、招投标加分&#xff0c;入专家库… 今天小编给大家收集了拥有软考证书可以领取软考福利的地区&#xff0c;希望对大家有所帮助&#xff01; 【深圳】 入户 ①核准类入户:…

C++【模板STL简介】

文章目录C模板&&STL初阶一、泛型编程二、函数模板2.1.函数模板概念2.2.函数模板格式2.3.函数模板的实例化2.4.模板参数的匹配原则三、 类模板3.1.模板的定义格式3.2.类模板的实例化STL简介一、STL的概念、组成及缺陷二、STL的版本C模板&&STL初阶 一、泛型编程…

AcWing蓝桥杯辅导课:第一讲递推与递归

AcWing 92. 递归实现指数型枚举 思路&#xff1a; 方法一&#xff1a; 暴力枚举 用二进制加位运算枚举每一个状态&#xff0c;输出即可&#xff0c;时间复杂度为 O(N2N)O(N2^N)O(N2N) 代码&#xff1a; import java.util.Scanner;/*** Description* Author: PrinceHan* Cre…

如何让WinForms应用程序拥有Windows 11设计主题?

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持&#xff0c;可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。Windows 11主题的时代已经到来了&#xff0c;可以为WinF…

Vue+Spring Boot前后端开发手册,开源获赞68K

企业技能要求 现在企业通常要求程序员既要有实战技能&#xff0c;也要内功扎实&#xff0c;对于新项目可以快速上手&#xff0c;熟悉底层原理后还应后劲十足&#xff0c;因此在笔试和面试时结合底层知识、实战应用、设计思维三方面进行考查。针对这3个方面的需求&#xff0c;阿…

【Java】用记事本实现“HelloWorld”输出

【在进行以下操作前需要下载好JDK并配置好对应的环境变量】 一、在任意文件夹中创建一个新的文本文档文件并写入以下代码 public class Hello{public static void main (String[] args){System.out.print("Hello,World!");} } 二、修改文件名称及文件类型为 Hello.j…

Python3,为了无损压缩gif动图,我不得不写了一个压缩神器,真香。

gif动图无损压缩1、引言2、代码实战2.1 模块介绍2.2 安装2.3 代码示例3、总结1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 求助~ 求助~ 求助~ 小鱼&#xff1a;你这是告诉我&#xff0c;重要的事情 说三遍吗&#xff1f; 小屌丝&#xff1a;你可以这么理解。 小鱼&#xff1a…