SpringBoot 文件上传+拦截器(springboot上传文件接口)

  本篇文章为你整理了SpringBoot 文件上传+拦截器(springboot上传文件接口)的详细内容,包含有springboot拦截请求转发到他服务器 springboot上传文件接口 springboot添加拦截器 springboot拦截器posthandle SpringBoot 文件上传+拦截器,希望能帮助你了解 SpringBoot 文件上传+拦截器。

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

  当表单的enctype="application/x-www-form-urlencoded"(默认)时,form表单中的数据格式为:key=value key=value。

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

  SpringBoot实现文件上传功能

  SpringBoot工程嵌入的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方法将其写入到磁盘中。

  

@RestController

 

  public class FileUploadController {

   @PostMapping("/upload")

   public String up(String nickname, MultipartFile photo, HttpServletRequest request) throws IOException{

   System.out.println(nickname);

   //获取图片的原始名称

   System.out.println(photo.getOriginalFilename());

   //获取文件类型

   System.out.println(photo.getContentType());

   String path = request.getServletContext().getRealPath("/upload/");

   System.out.println(path);

   saveFile(photo,path);

   return "上传成功";

   public void saveFile(MultipartFile photo, String path) throws IOException {

   // 判断存储的目录是否存在,如果不存在则创建

   File dir = new File(path);

   if (!dir.exists()){

   //创建目录

   dir.mkdir();

   File file = new File(path+photo.getOriginalFilename());

   photo.transferTo(file);

  

 

  修改浏览器访问此图片的路径为:

  

# 第一个斜线代表服务器所在的目录

 

  spring.web.resources.static-locations=/upload/

  

 

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

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

  性能监控:有时系统在某段时间莫名其妙很慢,可以通过拦截器在进入处理程序之前记录开始时间,在处理完后记录结束时间,从而得到改请求的处理时间。

  通用行为:读取Cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有提取Locale、Theme信息等,只要是多个处理程序都需要的,即可使用拦截器使用。

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

  
下面定义一个拦截器(注意:定义之后还要注册,此拦截器才能生效),实现HandlerInterceptor接口并重写父类方法

  

public class LoginInterceptor implements HandlerInterceptor {

 

   @Override

   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

   System.out.println("LoginInterceptor");

   return true;

  

 

  
excludePathPatterns定义排除某些地址不被拦截

  添加的一个拦截器没有addPathPattern任何一个url则默认拦截所有请求

  如果没有excludePathPatterns任何一个请求,则默认不放过任何一个请求

  

@Configuration //加上该注解后SpringBoot会自动读取这个类,这样下面的配置才能生效

 

  public class WebConfig implements WebMvcConfigurer {

   @Override //重写父类的增加拦截器的方法

   public void addInterceptors(InterceptorRegistry registry) {

   //把定义的拦截器new出来

   //registry.addInterceptor(new LoginInterceptor());

   // 只拦截/user/**路径

   registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/postTest1");

  

 

  以上就是SpringBoot 文件上传+拦截器(springboot上传文件接口)的详细内容,想要了解更多 SpringBoot 文件上传+拦截器的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: