springboot静态资源访问、文件上传、拦截器

静态资源访问

在static中

application.properties
spring.mvc.static-path=/static/**
spring.web.resources.static-location=classpath:/static/

过滤规则/static/**
静态资源位置classpath:/static/

文件放在static下,就可以直接访问了
在这里插入图片描述
springboot静态资源访问、文件上传、拦截器_第1张图片

http://localhost:8080/images/test.jpeg

spring.mvc.static-path-pattern=/images/**

springboot静态资源访问、文件上传、拦截器_第2张图片
springboot静态资源访问、文件上传、拦截器_第3张图片

spring.web.resources.static-locations=classpath:/css
将类放在target下的classes中

springboot静态资源访问、文件上传、拦截器_第4张图片

文件上传

表单的enctype属性规定在发送到服务器之前应该如何编码
springboot 限制文件大小为1m
可以通过MULTI[PARTFILE 获取文件信息

package com.example.helloworld2.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;

@RestController
public class FileUploadController {
    @PostMapping("/upload")//传输用户名称和头像nickname,photo
    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());

       // System.out.println(System.getProperty("user.dir"));
        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);
    }
}

springboot静态资源访问、文件上传、拦截器_第5张图片

springboot静态资源访问、文件上传、拦截器_第6张图片
springboot静态资源访问、文件上传、拦截器_第7张图片
可以看见输出的动态文件地址C:\Users\hyq\AppData\Local\Temp\tomcat-docbase.8080.4125486089777013888\upload

如果出现500,则表示后端出错,首先看看报错原因,如果是文件大小问题,就在propertie中改变max-file-size,可以改成10mb,然后重新上传,如果传输成功则问题解决

拦截器

拦截器应用场景:权限检查、性能监控、通用行为

package com.example.helloworld2.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//继承父类HandlerInterceptor ,可以通过ctrl+左键查看父类
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    //request前端请求,response给反馈
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws IOException
    {
        System.out.println("LoginInterceptor");
        return true;
    }
}

但是该类不会实现,除非配置config文件

package com.example.helloworld2.config;

import com.example.helloworld2.interceptor.LoginInterceptor;
import org.aopalliance.intercept.Interceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public  void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(new LoginInterceptor())
        //registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/**");
    }
}

你可能感兴趣的:(java,spring,boot,后端,java)