P5 springboot实现文件上传功能+拦截器

  • 前端测试接口:ApiPost7
  • java版本:JDK8
  • 项目框架:Springboot-web
  • 前端上传文件到系统,用apipost模拟,表单enctype属性改为key=value&key=value
  • 需要对上传文件大小进行配置
  • 在有基础框架的条件下进行操作:

文件上传关键代码

  1. 控制层创建
//1.创建控制层
@RestController
public class FileUploadController {
    //2.创建访问方法
    //文件,表单用post
    @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());
        //获取服务器的上下文路径,目的是把文件存在这个目录下的准备
        //getServletContext()是动态获取路径,因为以后上传云端路径不一样
        String path = request.getServletContext().getRealPath("/upload/");
        System.out.println(path);
        //将文件和等待存放路径放在其他方法上处理
        saveFile(photo,path);
        return "上传成功";
    }

    private void saveFile(MultipartFile photo, String path) throws IOException {
        //判断这个路径是否存在,不存在就创建
        File dir = new File(path);
        if (!dir.exists()){
            //创建目录
            dir.mkdir();
        }
        //将文件名带着路径拼起来一起给tranfer方法
        //在本地时可以写死
        File file = new File(dir+"/"+photo.getOriginalFilename());
        //利用MultipartFile的方法把路径赋给文件进行transferTo到系统
        photo.transferTo(file);
    }
}

  1. 配置文件改大小限制
#修改文件上传限制
spring.servlet.multipart.max-file-size=10MB
  1. 运行结果,文件上传到系统成功
    在这里插入图片描述
    P5 springboot实现文件上传功能+拦截器_第1张图片
  2. 使其展示到前端
#加载头像地址使web可以访问,不用classpath:是因为这不算程序本身的目录
spring.web.resources.static-locations=/upload/
  1. 输入网址
    http://localhost:8080/images/upload/QQ%E5%9B%BE%E7%89%8720230331140104.jpg
  2. 展示结果
    P5 springboot实现文件上传功能+拦截器_第2张图片

拦截器

  • 作用:拦截请求
  1. 创建一个拦截器类,继承拦截器,重写拦截器的prehandle方法
//1.创建拦截器,继承主拦截器接口
public class LoginInterceptor implements HandlerInterceptor {
    //2.重写常用的preHandle拦截器
    //3.重要参数:HttpServletRequest request:前端过来的请求,为false就过不来
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("LoginInterceptor拦截器已存在");
        return true;
    }
    //去config里面注册拦截器
}
  1. 去WebConfig中注册
  • 直接重写add拦截器方法
@Configuration
public class WebConfig implements WebMvcConfigurer {
    //重新增加拦截器的方法
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注册刚刚创建的拦截器
        registry.addInterceptor(new LoginInterceptor());
        //也可以只拦截需要user的请求
        //registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/**");
    }
}
  1. 随便访问一个方法,拦截器生效
    P5 springboot实现文件上传功能+拦截器_第3张图片

你可能感兴趣的:(自用教程,spring,boot,java,spring)