hawcat
文章20
标签28
分类8

文章分类

文章归档

Springboot - 文件上传和拦截器

Springboot - 文件上传和拦截器

文件上传

当表单的enctype = “application/x-www-form-urlencoded时,其form表单数据格式为:key = value&key = value

当表单的enctype = “multipart/form-data” 时,其传输数据形式则为我们当前学习的文件类型
同理在Postman下进行接口测试时也需要指定上传文件
![_~_LJ15UDFS3H1Z`VY.png](https://cdn.hawcat.cn/articlePicture/hawcat11673682577853328.png)

application.properties

TLNMVM5TO7WKIG53QXXFK.png

文件上传控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@RestController
public class FileUploadController {
private static final String UPLOADED_FOLDER = System.getProperty("user.dir") + "/upload";

@PostMapping("/upload")
public String upload(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 upDir = new File(path);
if(!upDir.exists()){
upDir.mkdir();
}
File file = new File(path + photo.getOriginalFilename());
photo.transferTo(file);

}

}


开启调试后在Postman中进行文件上传测试即可在调试控制台中看见对应的路径

拦截器

拦截器在web系统中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现,其使用场景如下:

权限检查:登录检测等。
性能监控:通过拦截器在某个方法执行前记录时间,完成后记录时间,得到请求的处理时间。
通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,只要是多个处理程序都需要的,都可以使用拦截器实现。

方法

Springboot定义了HandlerInterceptor接口实现自定义拦截器功能
HandlerInterceptor接口定义了preHandle、postHandle、afterCompletion三种方法,分别对应方法实现请求前、后等操作
QQ图片20230114160150.png

拦截器示例

实现拦截器

1
2
3
4
5
6
7
8
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
System.out.println("LoginInterceptor");
return true;
}
}

注册拦截器

1
2
3
4
5
6
7
8
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/**");
}
}

这里注册到/user/目录的拦截器使访问/user/目录下的路径都需要经过拦截器,每访问一次在后台调试可以看见拦截器中的测试代码printf(“LoginInterceptor”)

:D 获取中...

本文作者:hawcat
本文链接:https://hawcat.cn/2023/01/22/Spring2/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×