springboot文件上传+拦截器
1.静态资源访问
静态目录:
这里的static就是spring boot默认存放静态资源的位置
当我在这个静态资源目录放入一张图片,就可以使用浏览器进行访问
浏览器访问效果
这个时候我们的访问地址是:
http://localhost:8080/1.gif
这告诉我们当我们访问静态资源目录时,只需要输入域名或者ip加上静态资源名称
2.文件上传
文件上传配置文件书写
# springboot文件上传配置
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
文件上传代码
package com.example.demo.controller;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.net.http.HttpRequest;
@RestController
public class FileController {
private static final String UPLOADED_FOLDER = System.getProperty("user.dir")+"/upload/";
@PostMapping("/up")
public String upload(String nikename, MultipartFile f, HttpServletRequest request)throws IOException{
// System.out.println("文件大小:"+f.getSize());
// System.out.println(f.getContentType());
// System.out.println(f.getOriginalFilename());
// System.out.println(System.getProperty("user.dir"));
String path = request.getServletContext().getRealPath("/upload/");
System.out.println(path);
saveFile(f,path);
return "上传成功";
}
public void saveFile(MultipartFile f,String path)throws IOException{
File upDir = new File(path);
if(!upDir.exists()){
upDir.mkdir();
}
File file = new File(path+ f.getOriginalFilename());
f.transferTo(file);
}
}
3.拦截器
1.初始化拦截器
package com.example.demo.interceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行调用(Controller方法调用之前)
System.out.println("Before Controller, URL : ");
// 返回 true 表示继续流程(如调用下一个拦截器或处理器);返回 false 表示流程中断,不会继续调用其他的拦截器或处理器
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
// 可以通过modelAndView来修改模型数据
System.out.println("After Controller, Before View");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图执行之后
// 主要用于进行资源清理工作
System.out.println("After everything, URL : " );
}
}
2.初始化配置文件
package com.example.demo.config;
import com.example.demo.interceptor.LoginInterceptor;
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());
}
}