Java全面深入探究SpringBoot * 与文件上传
作者:铁甲小宝同学 发布时间:2021-11-12 20:08:24
*
* 的概念
动态拦截Actioon调用的对象,使开发者在一个Actioon执行的前后执行一段代码,也可以在Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。
作用:
动态拦截Action调用的对象(也就是实际项目中的controller层的接口)
一般 * 用于对用户访问的限制。如当用户没有登录时访问主页面,则可以使用 * 进行拦截并重定向到登录页面。
* 的配置
创建interceptor 文件夹并创建LoginInterceptor Java文件且实现HandlerInterceptor 这个接口。
//必须实现HandlerInterceptor这个接口
public class LoginInterceptor implements HandlerInterceptor {
/*
* 目标方法执行以前
* */
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object loginUser = session.getAttribute("loginUser");
if(loginUser != null) {
return true;
}
request.setAttribute("msg" ,"请登录!");
// response.sendRedirect("/");
request.getRequestDispatcher("/").forward(request,response);
return false;
}
//目标方法执行以后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
/**
* 页面渲染以后
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
配置 *
创建 config 文件夹并创建 AdminWebConfig 文件并实现WebMvcConfigurer的addInterceptors。
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**") //静态路径也会被拦截
.excludePathPatterns("/","/login","/css/**","/fonts/**" ,"/images/**","/js/**");
}
}
* 的原理
1、根据当前请求,找到**HandlerExecutionChain【**可以处理请求的handler以及handler的所有 * 】
2、先来顺序执行 所有 * 的 preHandle方法
1、如果当前 * prehandler返回为true。则执行下一个 * 的preHandle
2、如果当前 * 返回为false。直接 倒序执行所有已经执行了的 * 的 afterCompletion;
3、如果任何一个 * 返回false。直接跳出不执行目标方法
4、所有 * 都返回True。执行目标方法
5、倒序执行所有 * 的postHandle方法。
6、前面的步骤有任何异常都会直接倒序触发 afterCompletion
7、页面成功渲染完成以后,也会倒序触发 afterCompletion
文件上传
在之前我们学习SSM的时候就知道了 文件上传 这个功能,所以在 SpringBoot中我们就不在过多介绍,原理其实都差不多。
前端文件:
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
Controller层的配置:
@Controller
public class FileController {
@GetMapping("/updateFile")
public String FileUp(){
return "FileUp";
}
@PostMapping("/upload") // //new annotation since 4.3
public String singleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
if (file.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
return "redirect:uploadStatus";
}
try {
// Get the file and save it somewhere
byte[] bytes = file.getBytes();
Path path = Paths.get( file.getOriginalFilename());
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("message",
"You successfully uploaded '" + file.getOriginalFilename() + "'");
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/main.html";
}
}
更改文件上传大小
在application.properties中配置文件大小:
spring.servlet.multipart.max-file-size=10MB //单文件大小
spring.servlet.multipart.max-request-size=100MB //多文件
来源:https://blog.csdn.net/m0_54355125/article/details/124694558


猜你喜欢
- 1.扫描所有场景,保存并添加到Build Settings中using System.Collections;using System.Co
- 表单提交此处的表单时 -使用JSON.stringify()函数将数组转换成json类型提交后台,后台使用@RequestBody User
- 目录目标功能点准备工作引入 Maven 依赖配置 DAO 数据层创建 JWT 工具类登录LoginFilterLoginSuccessHan
- 前言最近在学习spring,抽空会将学习的知识总结下面,本文我们会接触spring 4的新功能:@Conditional注解。在之前的spr
- 线程池示例在分析线程池之前,先看一个简单的线程池示例。import java.util.concurrent.Executors;impor
- 前言Activity是Android中一个很重要的概念,堪称四大组件之首,关于Activity有很多内容,比如生命周期和启动Flags,这二
- 目录1.项目gitthub地址链接: https://github.com/baisul/generateCode.git切换到master
- 我们在代码中经常使用using保障非托管资源的释放 static void Main(string[] args){
- 代码import javax.mail.internet.InternetAddress;import javax.mail.interne
- BigDecimal类对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDe
- 在没讲.net如何随机生成汉字之前先给大家讲下汉字编码组成及原理。1、汉字编码原理到底怎么办到随机生成汉字的呢?汉字从哪里来的呢?是不是有个
- 1. Mybatis的@param注解自定义对象也用@param注解注:使用@param注解,mapper.xml 不加parameterT
- 1. InputStream -> byte[]引入 apache.commons.is 包import org.apache.com
- 一.协程间的通信当需要进行协程间的通信时,可以调用Channel方法,创建一个Channel接口指向的对象,通过调用该对象的send方法和r
- 写在前面项目中直接引用或者直接编译源码得到的ijkplayer在播放mkv文件时出现(-10000)的错误,去项目github查看了才知道,
- 满满的都是坑,因为服务器偷懒让客服端写统一下单,服务器只给了通知的url。微信的支付demo并没有统一下单的代码。读此文前先阅读: http
- 工厂方法模式动机创建一个对象往往需要复杂的过程,所以不适合包含在一个复合工厂中,当有新的产品时,需要修改这个复合的工厂,不利于扩展。而且,有
- 大家都知道为了防止我们的网站被有些人和黑客恶意攻击,比如我们网站的注册页面,如果我们在用户注册的时候不加上一个验证码框的话,别人就可以写一个
- 我们先来看本地如何生成图片验证码的,再来写输出到网页的验证码如何实现。先来看最简单的—实现的功能是,将一个字符串变成图片写入到文件中实现代码
- 本文章是基于鸿洋的Android 自定义View (一) 的一些扩展,以及对Android自定义View构造函数详解里面内容的一些转载。首先